簡體   English   中英

C#和Zip文件操作

[英]C# and Zip file manipulation

這是我正在尋找的:

我需要打開一個zip文件的圖像並迭代它的內容。 首先,zip容器文件有子目錄,在一個“IDX”里面有我需要的圖像。 我將zip文件內容解壓縮到目錄沒有問題。 我的zip文件非常龐大,就像在GB中一樣巨大,所以我希望能夠打開文件並拉出圖像,因為我一次一個地迭代它們來處理它們。

完成后我只關閉zip文件。 這些圖像實際上存放在數據庫中。

有沒有人知道如何使用,希望,免費工具或內置api? 此過程將在Windows計算機上完成。

謝謝!

SharpZipLib是滿足您要求的絕佳工具。

我用它來處理巨型嵌套zip文件(即ZIP文件中的ZIP文件)內的目錄中的巨型文件,使用流。 我能夠在壓縮流的頂部打開一個拉鏈流這樣我就可以調查內部zip的內容而無需提取整個父級。 然后,您可以使用流來查看內容文件,這可以幫助您確定是否要提取它。 它是開源的。

編輯:庫中的目錄處理並不理想。 我記得,它包含一些目錄的單獨條目,而其他目錄則隱含在文件條目的路徑中。

這是我用於收集特定級別(_startPath)的實際文件和文件夾名稱的代碼的摘錄。 如果您對整個包裝類感興趣,請告訴我。

// _zipFile = your ZipFile instance
List<string> _folderNames = new List<string>();
List<string> _fileNames = nwe List<string>();
string _startPath = "";
const string PATH_SEPARATOR = "/";

foreach ( ZipEntry entry in _zipFile )
{
    string name = entry.Name;

    if ( _startPath != "" )
    {
        if ( name.StartsWith( _startPath + PATH_SEPARATOR ) )
            name = name.Substring( _startPath.Length + 1 );
        else
            continue;
    }

    // Ignore items below this folder
    if ( name.IndexOf( PATH_SEPARATOR ) != name.LastIndexOf( PATH_SEPARATOR ) )
        continue;

    string thisPath = null;
    string thisFile = null;

    if ( entry.IsDirectory ) {
        thisPath = name.TrimEnd( PATH_SEPARATOR.ToCharArray() );
    }
    else if ( entry.IsFile )
    {
        if ( name.Contains( PATH_SEPARATOR ) )
            thisPath = name.Substring( 0, name.IndexOf( PATH_SEPARATOR ) );
        else
            thisFile = name;
    }

    if ( !string.IsNullOrEmpty( thisPath ) && !_folderNames.Contains( thisPath ) )
        _folderNames.Add( thisPath );

    if ( !string.IsNullOrEmpty( thisFile ) && !_fileNames.Contains( thisFile ) )
        _fileNames.Add( thisFile );
}

除了SharpZipLib之外,還有至少兩個更可行的選項(工作正常):

.NET不提供讀取標准ZIP文件內容的方法。 System.IO.Packaging.ZipPackage類可以創建和讀取包含特殊清單的zip文件。 盡管zip實用程序可以輕松讀取ZipPackage創建的.zip,但ZipPackage無法讀取不包含此文件的文件。 如果您是創建拉鏈的人,可以選擇ZipPackage。 用於執行.zip文件的實際壓縮和創建的類是System.IO.Packaging的內部,因此您無法直接使用它。

為了說服你的員工沒有OOTB方式來打開標准zip,你應該提到.NET還提供了System.IO.Compression.GZipStream類,它只(壓縮)壓縮文件流的內容。 它不會將它們解釋為單獨的文件,目錄等。

Jon Galloway在“ 在.NET中創建Zip存檔(沒有外部庫) ”中提到了所有選項,盡管沒有像即將發布的System.IO.Zip那樣干凈的選項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM