c# - 读取 7-zip 而不解压到文件
问题描述
我有一个包含许多文本文件的 7-zip 存档。我想阅读这些文本文件的内容,而不必将它们提取到文件系统中。
是否可以在内存中完成所有操作?
解决方案
安装名为的 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;
}
}
}
推荐阅读
- python - TypeError:'float' 对象在 openpyxl 函数 dataframe_to_rows 中不可下标
- c++ - 如何确保只有 1 个线程在运行?C++
- spring - spring boot @async with completablefuture 用于多线程
- azure-iot-sdk - 如何处理通过 DPS(组对称密钥)从网关设备调配到 IoT Central 的多个设备客户端
- eclipse-plugin - 如何在 Eclipse 中更改 ESP32 中的 SPI Flash 大小?
- java - 调用受 TLS 保护的 Rest 端点
- macos - 将 Team Explorer 添加到 Visual Studio 2019 for mac
- c++ - 如何在不受系统时间变化影响的情况下测量经过时间
- qt - 需要有关导入 QML 的帮助
- vue.js - @nuxtjs/axios 的 CORS 错误,但 fetch() 或 vue axios 没有