我有一个7-zip存档,其中包含许多文本文件。我想读取这些文本文件的内容,而不必将其提取到文件系统中。
是否可以在内存中全部完成?
答案 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;
}
}
}