Читайте 7-zip без распаковки в файлы - PullRequest
0 голосов
/ 22 декабря 2018

У меня есть 7-zip архив с несколькими текстовыми файлами.Я хотел бы прочитать содержимое этих текстовых файлов без необходимости извлекать их в файловую систему.

Можно ли сделать все это в памяти?

1 Ответ

0 голосов
/ 22 декабря 2018

Установите пакет 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;
        }
    }
}
...