Пример #1
0
/* FileSystem::destruktor
 */
FileSystem::~FileSystem() {
  /* zapíšeme změny do archivu */
  if (changed) {
    if (!keep_trash) removeTrash();
    cout << "Changes in archive " << archive_name;
    if (driver->saveArchive(&file_map, &removed_nodes)) {
      cout << " have been successfuly written" << endl;
    } else {
      cout << " have NOT been successfuly written" << endl;
    }
  }
  free((void*)archive_name);

  /* Driver je třeba smazat před vymazáním obsahu filesystému.
   * libzip totiž potřebuje přistoupit k datům filesystému při uzavírání archivu
   */
  delete driver;

  for (FileMap::reverse_iterator it = file_map.rbegin(); it != file_map.rend(); ++it) {
    delete it->second;
  }

  for (FileList::iterator it = removed_nodes.begin(); it != removed_nodes.end(); ++it) {
    delete (*it);
  }

  delete root_node;
  pthread_mutex_destroy(&fmap_mux);

}
Пример #2
0
void Tree::rebuildOriginalFile(char *pathIn)
{
    string info, aux_s,aux_s2;
    ifstream file;
    unsigned char* buffer;

    info.clear();


    rebuildTree(tree_written);
    //printNo(root);
    equilibrar(tree_written);

    file.open(pathIn, ios::in | ios::binary | ios::ate);

    if(file.is_open()){
        int size = file.tellg();
        file.seekg(0, ios::beg);

        buffer = new unsigned char[size];

        for(int i = 0; i < parada; i++){
            file.get();
        }

        for(int i = parada;i < size-1;i++){
            unsigned char ch = file.get();
            const unsigned char c = (const unsigned char)ch;
            info += charParaString(c);
        }

        aux_s = info;

        const char c = file.get();

        aux_s2 = charParaString(c);
        removeTrash(aux_s2);
        aux_s += aux_s2;
        procurafinal(aux_s);


    }
    else
    {
        cout << "TRASH!" << endl;
    }

    file.close();

}
Пример #3
0
//Reconstrói o arquivo original
void Tree::rebuildOriginalFile(char *pathIn)
{
    std::string info, aux_s,aux_s2;
    std::ifstream file;
    std::string oux, oux2;
    int sobra2 = 0;
    unsigned char* buffer;
    int x = 0;

    info.clear();



    rebuildTree(tree_written);

    //printNo(root);


    equilibrar(tree_written);



    file.open(pathIn, std::ios::in | std::ios::binary | std::ios::ate);


    if(file.is_open())
    {
        int size = file.tellg();
        file.seekg(0, std::ios::beg);

        buffer = new unsigned char[size];

        for(int i = 0; i < parada; i++)
        {
            file.get();
        }



        for(int i = parada;i < size-1;i++)
        {
            unsigned char ch = file.get();
            const unsigned char c = (const unsigned char)ch;



            info += charParaString(c);
            //ajeitar



            /*
        if(info.length() == 1024)
        {
            //sobra2 = info.length() - 1024;
            //oux = info.substr(1024, sobra2);
            //oux2 = info.substr(0,1024);

            aux_s = procura(info,&x);

            cout << "aux_s size: " << aux_s.length() << endl;
            info.clear();

            info += aux_s;
            //info += oux;

            aux_s.clear();
            //oux.clear();
            //oux2.clear();
        }
        */

        }



        //x = info.length();

        int sobra = 1024 - info.length();

        //aux_s = info.substr(x,sobra);
        aux_s = info;



        const char c = file.get();

        aux_s2 = charParaString(c);

        removeTrash(aux_s2);

        aux_s += aux_s2;


        //        cout << "aux_s: ";
        //        for(int i = 0; i < aux_s.length();i++)
        //        {
        //            cout << aux_s[i] << " ";
        //            if((i-1)%8 == 0 && i != 0)
        //            {
        //                cout << endl;
        //                cout << "aux_s: ";
        //            }
        //        }

        procurafinal(aux_s);


    }
    else
    {
        cout << "eRRO!" << endl;
    }

    file.close();

}