Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Сжатие файла

Ответить
Настройки темы
Delphi - Сжатие файла

Пользователь


Сообщения: 108
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Добрый день. Пытался использовать много разных компонентов, остановился пока на стандартном компоненте из rad studio xe2 - ZipFile, однако про него мало кто слышал, документация есть, но не совсем понятно, правильно ли я делаю. Итак, есть входной файл, я его сначала обрабатываю, потом сжимаю, попробовал сделать наоборот, сначала сжать, потом обработать, не помогло, при попытке сжать выдает AV C0x5. Думал, что просто напросто файл заблокирован, ловлю исключение EInOutError, ничего. Привожу часть кода:
Код: Выделить весь код
FileInEdit, FileOutEdit: TsFilenameEdit;
strmInput, strmOutput: TFileStream;
ZipFile : TZipFile;
Код: Выделить весь код
strmInput := TFileStream.Create(FileInEdit.FileName,fmOpenRead);
ZipFile.Add(FileInEdit.FileName, ExtractFileNameW(FileOutEdit.FileName), zcLZ77);
strmOutput := TFileStream.Create(FileOutEdit.FileName,fmOpenReadWrite);

Отправлено: 03:02, 14-09-2012

 

Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Из того что есть, не видно:
1. Создается ли вначале файл - ZipFile := TZipFile.Create
2. Открывается ли он для записи - ZipFile.Open('опачки.zip', TZipMode.zmWrite);

Для чего такие сложности - ExtractFileNameW, наверное своя функция? С D2009 string, это юникод.

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Последний раз редактировалось opel431, 14-09-2012 в 09:15.

Это сообщение посчитали полезным следующие участники:

Отправлено: 08:31, 14-09-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 108
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата opel431:
Создается ли вначале файл - ZipFile := TZipFile.Create »
Когда прочитал ваше сообщение как ошпарило, ведь действительно ZipFile=nil
Цитата opel431:
Открывается ли он для записи - ZipFile.Open('опачки.zip', TZipMode.zmWrite); »
Вот я и не знал, что его надо так открывать, в документации Embarcadero только описание объектов, а как применять не показано.

Цитата opel431:
Для чего такие сложности - ExtractFileNameW, наверное своя функция? С D2009 string, это юникод. »
Я честно говоря не помню, под какой версией начинал писать эту прогу, скорее всего 2010, но знаю про стандартную фунцкию, но почему-то не применил ее, сейчас переправлю на стандартную. (Прога писалась год назад, сейчас она мне понадобилась, решил доработать и исправил несколько ошибок и говнокод, удивляюсь, как я мог такое написать).

Сейчас при попытка ZipFile.Add возникает такая ошибка:
---------------------------
Support for compression method not registered: PPMd version I, Rev 1.
---------------------------
И так с любым методом.

Отправлено: 14:01, 14-09-2012 | #3


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Цитата novashdima:
Support for compression method not registered: PPMd version I, Rev 1. »
uses System.Zip

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Отправлено: 03:01, 15-09-2012 | #4


Пользователь


Сообщения: 108
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата opel431:
uses System.Zip »
есть такое, если бы не подключил, то мне компилятор написал бы, TZipFile - undeclared identifier

Отправлено: 03:17, 15-09-2012 | #5


Аватара для opel431

Ветеран


Contributor


Сообщения: 1803
Благодарности: 714

Профиль | Отправить PM | Цитировать


Цитата novashdima:
есть такое »
Я, не к тому написал, чтобы вы подключили, а к тому, что в модуле, всегда можно посмотреть код реализации.

-------
Хвала тому, кто встав среди камней, уча другого, сам будет умней.


Отправлено: 22:16, 17-09-2012 | #6


Пользователь


Сообщения: 108
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата opel431:
всегда можно посмотреть код реализации »
В данный момент изучаю, посмотрел половину модуля, увидел, что открываю правильно, потом нашел участок кода с извлечением:
Код: Выделить весь код
class procedure TZipFile.ExtractZipFile(ZipFileName: string; Path: string);
var
  LZip: TZipFile;
begin
  LZip := TZipFile.Create;
  try
    LZip.Open(ZipFileName, zmRead);
    LZip.ExtractAll(Path);
    LZip.Close;
  finally
    LZip.Free;
  end;
end;
То есть при извлечении делать Open не надо получается?
И вроде нашел код, в результате которого у меня вылетает ошибка в проге:
Код: Выделить весь код
if not FCompressionHandler.ContainsKey(Compression) then
    raise EZipException.CreateResFmt(@SZipNotSupported, [
      TZipCompressionToString(Compression) ]);

Отправлено: 03:49, 18-09-2012 | #7



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Delphi - Сжатие файла

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] Созд.*.txt по имени файла, с перемещением *.txt и файла в папку с именем файла. OSArev Скриптовые языки администрирования Windows 2 30-01-2011 11:58
Сжатие в архив ssh venuko Общий по Linux 3 05-05-2010 19:09
сжатие wav для телефона guma Мобильные ОС, смартфоны и планшеты 10 28-12-2006 13:32
А что за сжатие? nec 3540A Хочу все знать 8 05-03-2006 19:24
Сжатие Wav->MP3 Andrewkras Программное обеспечение Linux и FreeBSD 11 12-06-2003 09:05




 
Переход