2011-08-24 42 views
1

我遇到的檔案都是通過將工作檔案與不存在的檔案合併而創建的,從而有效地將一個檔案的內容複製到另一個中。這是我們合併過程的一部分。像這樣...ZipForge本機錯誤

ZipDestination := TZipForge.Create(nil); 
if FileExists(DestinationZipFileName) then 
    ZipDestination.OpenArchive(fmOpenReadWrite + fmShareDenyWrite) 
else 
    ZipDestination.OpenArchive(fmCreate); 

ZipDestination.Zip64Mode := zmAuto; 
ZipDestination.MergeWith(SourceZipFileName); 
ZipDestination.CloseArchive; 

這是從檔案中獲取blob,解壓縮它,並使其爲查看器做好準備的代碼。

CompressedStream := TMemoryStream.Create; 
UnCompressedStream := TMemoryStream.Create; 
GetCompressedStream(CompressedStream); // this fetches the blob from the zipfile 
ZipForge.InMemory := True; 
// Native Error 00035 on next line (sometimes) 
ZipForge.OpenArchive(CompressedStream, False); 
ZipForge.FindFirst('*.*', ArchiveItem, faAnyFile - faDirectory); 
sZipFileName := ArchiveItem.FileName; 
sZipPath := ArchiveItem.StoredPath; 
ZipForge.ExtractToStream(sZipPath + sZipFileName, UnCompressedStream); 
ZipForge.CloseArchive; 

但我遇到 「本機錯誤00035」 有時

現在奇怪的是,我得到這些錯誤,當我嘗試合併存檔(即努力合併後的檔案中查看其他斑點不會引發任何異常)

內查看第一BLOB

這可能是一些關於ZipForge.MergeWith,我沒有照顧,也可能是我的GetCompressedStream的錯誤(但如果我切換存檔內斑點的順序,它總是發生在第一個唯一的) 。 看起來像它的時候了一個測試項目,看看到底發生了什麼上。

編輯

原來的問題簡單地要求對這些原住民的錯誤,我很滿意我所選擇的答案,其指導。至於我的問題,以及我相信這是我傳入OpenArchive的CompressedStream的問題。

+1

什麼做的組件供應商說,當你問他們? –

+0

@大衛,等待迴應。當我有迴應時我會更新。 – Sam

+1

@David,供應商回覆「......假期專家......」。幸運的專家! – Sam

回答

2

機錯誤00035提供免費的支持是「無效的存檔文件」。它發生在ZipForge找不到本地或中央目錄標題(即,當你試圖打開一個文件,不是一個zip)。

,我不認爲他們是在幫助文檔,但轉換表的本地錯誤錯誤代碼發生在ZFConst.pas。有一個NativeToErrorCode表從「本地」錯誤轉換爲錯誤字符串數組中的索引。如果這還不足以告訴你問題是什麼,只需在ZipForge.pas中查看raise語句中的錯誤代碼即可。他們堅持用滿5位數代碼,這樣你就可以搜索00035,而不是僅僅35以避免虛假的結果。