阅读7-zip而不提取文件

时间:2018-12-22 15:55:14

标签: c# stream 7zip

我有一个7-zip存档,其中包含许多文本文件。我想读取这些文本文件的内容,而不必将其提取到文件系统中。

是否可以在内存中全部完成?

1 个答案:

答案 0 :(得分:1)

安装名为SevenZipSharp.Interop的NuGet软件包

然后您可以读取存档中的文件:

static void ReadFilesInArchive(string archiveFilename)
{
    SevenZipBase.SetLibraryPath(@".\x86\7z.dll");
    var extractor = new SevenZipExtractor(archiveFilename);

    var filesInArchive = extractor.ArchiveFileData.ToList();

    filesInArchive.ForEach(f =>
    {
        using (MemoryStream ms = new MemoryStream())
        {
            extractor.ExtractFile(f.FileName, ms);
            ms.Seek(0, SeekOrigin.Begin);
            using (StreamReader sr = new StreamReader(ms))
            {
                var lines = sr.ReadAllLines();
                Console.WriteLine(lines.Count());
            }
        }
    });
}

请注意,这依赖于以下扩展方法:

public static class Extensions
{
    public static IEnumerable<string> ReadAllLines(this StreamReader reader)
    {
        string line;
        while ((line = reader.ReadLine()) != null)
        {
            yield return line;
        }
    }
}