Форум программистов, компьютерный форум CyberForum.ru

Как запаковать папку - C++

Восстановить пароль Регистрация
 
OlegPL
5 / 5 / 0
Регистрация: 22.10.2013
Сообщений: 100
27.03.2014, 02:23     Как запаковать папку #1
Здравствуйте, у меня задача такова. Нужно написать программу которая бинарно открывает папку с папками и упаковывает в мою папку с другим расширением. За тем обратно.... Упаковку самих файлов я сделал... А вот с папки проблема... Не знаю как выбрать папку и получать папки которые находятся в этой папке...
Вот мои наработки... И вообще такое возможно?
Упаковка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
void Pack::StartToPack()
{
    ///////////////////////////////////////////////////////////////////////////
    //  ПОЛУЧАЕМ ИМЕНА ФАЙЛОВ
 
    vector<string> fileName;
    fileName.push_back("tt");
    //fileName.push_back("test2.jpg");
    //fileName.push_back("test3.txt");
 
    ///////////////////////////////////////////////////////////////////////////
    //  ПРОВЕРЯЕМ НА НАЛИЧИЕ ФАЙЛОВ
 
    ifstream file_read;
    for(int i = 0; i < fileName.size(); i++)
    {
        file_read.open(fileName[i]);
        if(!file_read.is_open())
        {
            cout << "Файл " << fileName[i] << " не открылся!" << endl;
            return;
        }
        file_read.close();
    }
 
    ///////////////////////////////////////////////////////////////////////////
    //  ПОЛУЧАЕМ ДЛИНУ ИМЕН
 
    vector<int> nameSize;
    for(int i = 0; i < fileName.size(); i++)
        nameSize.push_back(fileName[i].length());
    
    ///////////////////////////////////////////////////////////////////////////
    //  ПОЛУЧАЕМ РАЗМЕРЫ ФАЙЛОВ
 
    vector<int> fileSize;
    for(int i = 0; i < fileName.size(); i++)
    {
        file_read.open(fileName[i]);
        file_read.seekg(0, ios::end);
        fileSize.push_back(file_read.tellg());
        file_read.close();
    }
 
    ///////////////////////////////////////////////////////////////////////////
    //  ЧИТАЕМ ДАННЫЕ ИЗ ФАЙЛА
 
    ///////////////////////////////////////////////////////////////////////////
    //  ЗАПИСЫВАЕМ ВСЁ В ФАЙЛ
 
    char tmp;
    ofstream file_write("test.pack", ios::binary);
    int size = fileName.size();                                                     // Записываем количество файлов
    file_write.write((char*)&size, sizeof(int));
    for(int i = 0; i < fileName.size(); i++)
    {
        file_write.write((char*)&nameSize[i], sizeof(nameSize[i]));                 // Записываем размер имени файла
 
        for(int j = 0; j < fileName[i].length(); j++)                               // Записываем имя файла
            file_write.write((char*)&fileName[i][j], sizeof(fileName[i][j]));       
 
        file_write.write((char*)&fileSize[i], sizeof(fileSize[i]));                 // Записываем размер файла
 
        file_read.open(fileName[i], ios::binary);                                   // Открываем файл с которого читаем
        while(!file_read.eof())
        {
            if(!file_read.read((char*)&tmp, sizeof(tmp))) continue;
            file_write.write((char*)&tmp, sizeof(tmp));                             // Записываем по символьно
        }
        file_read.close();
    }
    file_write.close();
    
}
Распаковка:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
void Unpack::StartToUnpack()
{
    int number, name_size, file_size;
    char tmp = NULL;
    string str, path; 
 
    ofstream file_write;                                                    // Создаем для записи
    ifstream file_read("test.pack", ios::binary);                           // Открываем запакованные файлы
 
    file_read.read((char*)&number, sizeof(int));                            // Получаем количество файлов
    for(int i = 0; i < number; i++)
    {
        str.clear();
        path = "D:/Projects/Проект Visual C++/Packer/Packer/ttout/";
        
        file_read.read((char*)&name_size, sizeof(name_size));               // Получаем длину имен файлов
 
        for(int j = 0; j < name_size; j++)                                  // Считываем имена по символьно
        {
            file_read.read((char*)&tmp, sizeof(tmp));               
            str.push_back(tmp);
        }
        path += str;                                                        // Получаем имя с путем
 
        file_read.read((char*)&file_size, sizeof(file_size));               // Получаем размер файла
 
        file_write.open(path, ios::binary);
        for(int j = 0; j < file_size; j++)                                  // Посимвольно разбираем файл
        {
            file_read.read((char*)&tmp, sizeof(tmp));
            file_write.write((char*)&tmp, sizeof(tmp));
        }
        file_write.close();
    }
    file_read.close();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2014, 02:23     Как запаковать папку
Посмотрите здесь:

Как создать папку (а не файл) в VS2003? C++
C++ как программно открыть папку?
C++ Как скопировать папку?
C++ Как стереть папку с файлами?
C++ Запаковать exe файл
Как очистить папку от всех файлов C++
Запаковать .txt в программу C++
Как создать папку в неизвестной директорий C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 03:30. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru