2017-05-12 32 views
1

我使用英巴卡迪諾C++ Builder的10.1柏林更新2.我用System.Zip.TZipFile.ExtractAll()提取大.zip文件。如何解決System.Zip.TZipFile.ExtractAll不能從.zip文件中提取所有數據?

這裏是圍繞問題方案的細節:

  • .zip文件的大小爲387077 KB
  • 使用System.Zip.TZipFile.ExtractAll()提取.zip文件,我們最終得到:
    • 一4,194,304 KB大小的文件。
    • 數據被截斷。
  • 使用Windows操作系統,右鍵單擊Extract All...,我們最終
    • 一6035259 KB大小的文件。

我們需要的所有數據的出這個文件。

System.Zip.TZipFile文檔,我沒有看到有關文件大小有關的限制什麼。

據我所知,這是英巴卡迪諾提供的方法來提取.zip文件。我該如何解決這個問題?

+0

你知道是否已將所有內容刷新到磁盤?假設在Windows操作系統上運行相當於'sync' – Griffin

+0

@Griffin我確定這是我的無知,你是什麼意思將所有東西都刷到磁盤上?提取方法調用被包裝在'Synchronize()'中,它應該確保它在主線程上運行。 – HappyCoding

+0

在基於Linux的操作系統中'sync'確保內存中的所有內容都被刷新爲閃存。我認爲在Windows中你可能有類似FlushFileBuffers這樣的東西。當然這可能不是問題的原因,但請檢查。 – Griffin

回答

0

直到你告訴我們的數據是否只是截斷或代替某種程度上轉化,我們真的只能猜測發生了什麼事。但是,這是一個受過良好教育的猜測。您的輸出結果正好是許多舊技術的熟悉邊界。

是(正如你指出)的文件沒有說明此限制,進一步的事實表明,這是什麼開發商不屑於支持,可能是一個很長的時間以前只是一個上限。他們從來沒有想到你會需要更多的東西,特別是因爲很多文件系統甚至在最近才支持比這更大的文件。

身高現代化,標準C++和解壓一個很好的第三方庫。

+0

數據被截斷;我更新了該帖子以包含此信息。目前,我同意你的回答。 – HappyCoding

+1

'TZipFile'是2011年在XE2中推出的。大型'.zip'文件比這個時間長得多,而且從NTFS首次引入到NT3以來,Windows已經支持大於4GB的大文件。 Embarcadero在創建'TZipFile'時根本沒有打擾到對ZIP64格式的支持(現在還沒有)。 –

+1

@RemyLebeau:夠公平的。 –

相關問題