Dimon.Ru |
Отправлено: 12.12.2004, 18:59 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
Здравствуйте!
Подскажите как лучше разрешить такую проблему:
Мне нужно несколько файлов записать в один, с возможностью последующего разделения обратно.
ну типа архивирования. как бы это лучше сделать?
может быть кто-то уже делал-что-то подобное? или существуют какие-то бесплатные архиваторы или
библиотеки функций для компрессии и декомпрессии файлов, которые позволяют запаковать файлы,
а потом распаковать их обратно. (бесплатность в этом случае принципиальна!)
пытался сделать так:
CODE |
// Имена файлов
AnsiString setupFileName=ExtractFilePath(OpenModuleDialog->FileName)+"module.mod";
AnsiString setupFileNameDescription=ExtractFilePath(OpenModuleDialog->FileName)+"module.dsc";
// Файлы, содержащий все для установки модуля
// moduleSetupFile — все файлы, записанные один за другим
// moduleSetupFileDescription — описания смещений начала записи каждого файла
ofstream moduleSetupFile(setupFileName.c_str());
ofstream moduleSetupFileDescription(setupFileNameDescription.c_str());
for(int i=0; i<ModuleFilesListBox->Items->Count; i++)
{// Перебираем по элементам ModuleFilesListBox
// Открываем по очереди файлы, перечисленные в компоненте ModuleFilesListBox
ifstream moduleUnitFile(ModuleFilesListBox->Items->Strings[i].c_str());
unsigned long bytesCount=0;
while(!moduleUnitFile.eof())
{// Читаем файл до конца по байтам и пишем всю инфу в moduleSetupFile
// Количество записанных байтов и имя файла пишем в moduleSetupFileDescription
char buffer[1]; // Временная переменная
moduleUnitFile.getline(buffer,sizeof(buffer)); //чтение
moduleSetupFile<<buffer; //Запись
bytesCount+=sizeof(buffer); //Подсчет прочитанных байтов
};
// пишем в moduleSetupFileDescription имя файла и количество байтов
moduleSetupFileDescription<<ModuleFilesListBox->Items->Strings[i].c_str()<<"\t"<<bytesCount<<endl;
// Закрываем файл, после того как все прочитали и записали в moduleSetupFile
moduleUnitFile.close();
}
// Закрываем файлы, после того как все записали
moduleSetupFile.close();
moduleSetupFileDescription.close(); |
всё виснет и ничего не пишется
может кто посоветует, как лучше сделать? |
|
Георгий |
Отправлено: 12.12.2004, 23:19 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
есть zip бесплатный. компонент для BCB, кажется зовётся, zipTV или TVZip.
кстати — у тебя приятный стиль программирования. где научился?
Отредактировано Георгий — 13/12/2004, 00:23 |
|
Dimon.Ru |
Отправлено: 13.12.2004, 10:22 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
QUOTE | есть zip бесплатный. компонент для BCB, кажется зовётся, zipTV или TVZip. |
спасибо, ща буду искать )
QUOTE | кстати — у тебя приятный стиль программирования. где научился? |
еще раз спастбо, пока никто не хвалил )))
а кто научил — жисть научила )))) |
|
Dimon.Ru |
Отправлено: 13.12.2004, 10:41 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
что-то не могу найти компонениты ни TVZIP ни VCLZIP....
может они есть у кого? или ссылочку кто подскажет? |
|
Konstantine |
Отправлено: 13.12.2004, 11:18 |
|
Мастер участка
Группа: Модератор
Сообщений: 545
|
здесь — в закрытом форуме...
|
|
Dimon.Ru |
Отправлено: 17.12.2004, 16:24 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
С архиватором проехали.....
приведенный мной ранее код, как выяснилось, работает!!! но только для файлов с текстовым содержимым.... беда в том, что мне нужно еще и dll и exe туда же запихать.....
может кто подскажет как это сделать?
вроде бы надо как-то файлы в бинарном режиме открывать.... я пробовал, но что-то ничё не выходит..... |
|
Slon |
Отправлено: 17.12.2004, 23:01 |
|
Ученик-кочегар
Группа: Участник
Сообщений: 19
|
//открыть файл в бинарном режиме:
ofstream out("filename", ios::binary);
//запись символа в файл
out.put(char);
//для чтения
ifstream in("filename", ios::binary);
in.get(char&);
Также обрати внимание на функции read и write
|
|
Dimon.Ru |
Отправлено: 19.12.2004, 13:26 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
spasibo, budu probovat'!!!!! |
|
Dimon.Ru |
Отправлено: 20.12.2004, 11:07 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
2 Slon:
Все получилось !!!!!!! спасибо ОГРОМНОЕ!!!!! |
|
Dimon.Ru |
Отправлено: 23.12.2004, 15:32 |
|
Станционный диспетчер
Группа: Участник
Сообщений: 92
|
слушайте, совсем ничего не понимаю.......
написал так, как предложил Slon... записать файлы в один (подряд, один за другим по байтам).
надо теперь разделить их обратно.
почему-то почти все символы заменяются треугольной скобкой!!! ">"
что это может быть? или это я торможу...... |
|