簡體   English   中英

在內存中提取tgz文件並在C#中訪問文件

[英]Extract tgz file in memory and access files in C#

我有一項從遠程端點下載*.tgz文件的服務。 我使用SharpZipLib提取壓縮存檔的內容並將其寫入磁盤。 但是現在我要防止將文件寫入磁盤( 因為該進程對該磁盤沒有寫權限 )並將其保留在內存中。

如何從內存訪問解壓縮的文件? 假設歸檔文件包含簡單的文本文件

這是我到目前為止的內容:

    public void Decompress(byte[] byteArray)
    {
        Stream inStream = new MemoryStream(byteArray);
        Stream gzipStream = new GZipInputStream(inStream);

        TarArchive tarArchive = TarArchive.CreateInputTarArchive(gzipStream);
        tarArchive.ExtractContents(@".");
        tarArchive.Close();

        gzipStream.Close();
        inStream.Close();
    }

檢查這個這個

事實證明, ExtractContents()通過迭代TarInputStream 當您這樣創建TarArchive

TarArchive.CreateInputTarArchive(gzipStream);

它實際上將您要傳遞的流包裝到TarInputStream 因此,如果要對提取文件的方式進行更細粒度的控制,則必須直接使用TarInputStream

看看,是否可以像這樣遍歷文件,目錄和實際文件內容:

Stream inStream = new MemoryStream(byteArray);
Stream gzipStream = new GZipInputStream(inStream);

using (var tarInputStream = new TarInputStream(gzipStream))
{
    TarEntry entry;
    while ((entry = tarInputStream.GetNextEntry()) != null)
    {
        var fileName = entry.File;
        using (var fileContents = new MemoryStream())
        {
            tarInputStream.CopyEntryContents(fileContents);

            // use entry, fileName or fileContents here
        }
    }
}

暫無
暫無

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

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