我需要管理.Z(Unix壓縮)文件,主要是dezip函數。 什麼是最好的圖書館來做到這一點? 預先避免DLL(如7z.dll)。 編輯:今天我有一個與7z.dll接口的JCL壓縮庫的解決方案。 我只是想尋找更簡單的解決方案&,因爲我只需要'.Z'的解析函數。Delphi XE2 .Z Unix壓縮文件庫
3
A
回答
1
要解壓縮.Z文件,我只是用Delphi XE2內置的zlib庫:
uses ...,ZLib;
procedure UnpackFiles;
var
LList: TStringDynArray;
I: Integer;
FileName: String;
DestFileName: String;
LUnZip: TZDecompressionStream;
LInput, LOutput: TFileStream;
begin
LList:= TDirectory.GetFiles(ImportDir, '*.gz');
for i:= 0 to Length(LList)-1 do
begin
FileName:= LowerCase(LList[i]);
DestFileName:= ChangeFileExt(FileName, '.csv');
{ Create the Input, Output, and Decompressed streams. }
LInput := TFileStream.Create(FileName, fmOpenRead);
LOutput := TFileStream.Create(DestFileName, fmCreate);
LUnZip := TZDecompressionStream.Create(LInput, 15+16); // 16 = read as gzip header !
Log(Format('create uncompressed file %s', [DestFileName]));
{ Decompress data. }
LOutput.CopyFrom(LUnZip, 0);
{ Free the streams. }
LUnZip.Free;
LInput.Free;
LOutput.Free;
Log(Format('Delete compressed file %s', [FileName]));
DeleteFile(FileName);
end;
end;
的重要組成部分,是設置讀取gzip頭的選項:
LUnZip := TZDecompressionStream.Create(LInput, 15+16); // 16 = read as gzip header !
+1
來自文檔:'windowBits對於可選的gzip解碼也可以大於15。將32添加到windowBits以啓用帶自動標題檢測的zlib和gzip解碼,或添加16以僅解碼gzip格式(zlib格式將返回Z_DATA_ERROR)。如果正在解碼gzip流,則strm-> adler是crc32而不是adler32。「 –
+0
? zlib不管理.Z(Unix壓縮)文件。 – philnext
相關問題
- 1. Delphi XE2 TZipFile:替換zip壓縮文件中的文件
- 2. 用Java讀取.Z文件(unix壓縮文件)
- 3. 解壓縮.Z文件
- 4. 解壓縮.Z文件C
- 5. 如何解壓/解壓縮* .z文件
- 6. 使用java在unix中解壓縮.Z文件
- 7. Delphi XE2 Firemonkey文件下載?
- 8. DataSnap XE2服務器 - 使用GZIP壓縮?
- 9. 如何解壓縮.Z文件
- 10. 在MATLAB中解壓縮.Z文件
- 11. 使用Python解壓縮.Z文件
- 12. 在Perl中解壓縮.Z文件
- 13. Unix將文件解壓縮到目錄
- 14. 如何使用Delphi將多個文件壓縮到單個壓縮文件中
- 15. 在IDL中處理Unix壓縮文件(.Z)的最佳方法是什麼?
- 16. .NET文件壓縮庫
- 17. 解壓* .Z文件
- 18. Delphi XE2和TurboPower Orpheus
- 19. Delphi XE2文件共享和iOS
- 20. Delphi XE2無法創建輸出文件
- 21. Delphi中的異步讀取文件XE2
- 22. Delphi XE2按文件名排序Tstringlist
- 23. 如何最小化解壓和壓縮Unix文件的時間?
- 24. 解壓縮Z文件,然後在腳本中刪除文件
- 25. Delphi XE2 TurboPower組件狀態
- 26. SafeMM for Delphi XE2
- 27. DateToStr和Delphi XE2
- 28. delphi xe2 TThreadedStringList
- 29. Unix:遞歸解壓縮各自文件夾中的.zip文件
- 30. Unix系統編程 - 以編程方式解壓縮文件
.Z文件由ZLIB讀寫,用C語言編寫.Delphi的幾個部分都使用它,因此delphi包含了二進制'.obj'文件版本(使用舊版Borland C編譯器編譯)。你可以靜態鏈接到它。 Jedi JCL庫顯示如何使用它的示例文件夾,JVCL用TJvZLibMultiple封裝組件形式的Jedi JCL包裝器。 http://stackoverflow.com/questions/1450510/compress-all-files-but-skip-one –
@WarrenP我還沒試過JCL/JVCL,但TJvZLibMultiple似乎沒有認出.Z,當我嘗試JCL壓縮的例子時需要7z DLL。 – philnext
@Warren,.Z文件由'compress'工具管理,該工具使用* LZW *壓縮算法。 Zlib使用* deflate *算法處理.gz和.zip文件。 'gzip'工具雖然經典地是Zlib的一個接口,但恰巧能夠處理兩種壓縮格式,但Zlib本身仍然只是用於放氣,而不是LZW。 –