我一直在寻找一种解决方案,可以使用 C# 从 .tgz 或 .tar.gz 存档中读取一个或多个文件,而无需将文件提取到磁盘。
我已经确定了许多在 GNU 许可下发布的第三方库,它们允许某人提取 .tgz 存档,但没有任何运气找到解决方案来读取文件而不先提取它。
如果可能的话,我想坚持使用标准库 - 有没有人有使用 GZipStream 或任何其他方法的解决方案?谢谢!
编辑:
我想实现类似于以下内容:
public static void Decompress2(FileInfo fileToDecompress)
{
using (FileStream fileStream = fileToDecompress.OpenRead())
{
using (var memStream = new MemoryStream())
{
string currentFileName = fileToDecompress.FullName;
string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);
using (FileStream decompressedFileStream = File.Create(newFileName))
{
using (GZipStream decompressionStream = new GZipStream(fileStream, CompressionMode.Decompress))
{
byte[] bytes = new byte[4096];
int n;
while ((n = decompressionStream.Read(bytes, 0, bytes.Length)) != 0)
{
memStream.Write(bytes, 0, n);
}
}
}
}
}
}
文件是从 .tgz 或 .tar.gz 存档中提取并加载到内存中。提取到内存后,我需要能够读取提取文件的内容。提供的代码应该允许我提取 .gz 但我不确定如何添加对 .tar 的支持或如何在文件加载到内存后读取文件。