[英]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.