首页 > 解决方案 > 读取 7-zip 而不解压到文件

问题描述

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

是否可以在内存中完成所有操作?

标签: c#stream7zip

解决方案


安装名为的 NuGet 包SevenZipSharp.Interop

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

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;
        }
    }
}

推荐阅读