2012-01-14 62 views
-2

我有ZipForge for Delphi XE2 & Delphi XE2。ZipForge和無效的檔案

我嘗試測試任何無效的ZIP壓縮文件(例如不完全下載)喜歡在他們的演示:

procedure TfmMain.bnStartClick(Sender: TObject); 
begin 
    with Archiver do 
    begin 
    FileName := 'c:\2.zip'; 
    OpenArchive; 
    try 
     TestFiles('*.*'); 
    except 
     MessageDlg('Errors occurred in the archive file', mtError, [mbOk], 0); 
    end; 
    CloseArchive; 
    end; 
end; 

但我的異常不火; ZipForge的對話框會觸發而不是我的。

我試圖Abbrevia Component但如果檔案是無效的,甚至無法識別...

請幫助我,使我異常的工作(不ZipForge的一個),或者建議我用一個zip文件更好的組件測試功能。謝謝!

+0

如何內置的ZIP XE2類處理它 – 2012-01-14 08:12:05

+0

我無法看到的來源:(沒有什麼做的(或幾乎沒有),與該組件,也許有更好的東西... – maxfax 2012-01-14 09:55:45

回答

2

請注意,您可以修改ZIP文件,例如通過截斷它們,ZIP文件仍然有效。用我的測試文件,我刪除了最後的5000個字節,並報告爲有效。我使用我的ZIP程序成功解壓縮了它。當然提取的內容是不正確的,而不是原始內容。也許這就是你正在發生的事情。也許你試圖破壞你的ZIP文件實際上並沒有把它變成一個無效的ZIP文件。

德爾福XE2帶有一個內置的ZIP組件,在我的簡單測試中運行良好,併成功檢測到一個無效文件,一旦我截斷了足夠的文件使其真正損壞。

我使用IsValid方法來檢查有效性。這是我非常簡單的測試程序。

program ZipTest; 

{$APPTYPE CONSOLE} 

uses 
    System.SysUtils, System.Zip; 

procedure Main; 
const 
    ZipArchive = 'C:\desktop\test.zip'; 
var 
    ZipFile: TZipFile; 
    FileName: string; 
begin 
    ZipFile := TZipFile.Create; 
    try 
    if ZipFile.IsValid(ZipArchive) then begin 
     ZipFile.Open(ZipArchive, zmRead); 
     for FileName in ZipFile.FileNames do begin 
     Writeln(FileName); 
     end; 
    end else begin 
     Writeln(ZipArchive + ' not valid'); 
    end; 
    finally 
    ZipFile.Free; 
    end; 
end; 

begin 
    try 
    Main; 
    Readln; 
    except 
    on E: Exception do begin 
     Writeln(E.ClassName, ': ', E.Message); 
    end; 
    end; 
end. 
1

如果您有一個無效的ZIP文件,最有可能撥打OpenArchive將失敗。只要你的執行處理不包含這種情況,你就會得到你描述的結果。

更新:在TestFiles或任何其他方法期間捕獲異常的建議方法是連接一個OnProcessFileFailure事件處理程序。

+0

OpenArchive工作正常,TestFiles('*。*')存在問題 – maxfax 2012-01-14 09:51:00

+0

我不想自己編寫/編寫代碼,上面的兩個組件都不夠好,他們無法處理無效的歸檔文件 – maxfax 2012-01-14 09:54:29

+0

我期望他們可以很好地處理它們。最有可能在你的代碼中出現問題 – 2012-01-14 13:20:04