我已经看到发布了这个问题的一些答案,但与我正在努力解决的问题完全不同,而且我遇到了一些麻烦。
基本上,我使用的 API 以字节数组的形式返回数据,如下所示:
byte[] file = Api.getZippedReport(blah, blah);
我试图找出在 C# 中吐出制表符分隔文件内容的最佳方法,以便我可以用它做点什么。
获取数据的最简单方法是什么,以便我可以使用它而无需实际保存文件?
我已经看到发布了这个问题的一些答案,但与我正在努力解决的问题完全不同,而且我遇到了一些麻烦。
基本上,我使用的 API 以字节数组的形式返回数据,如下所示:
byte[] file = Api.getZippedReport(blah, blah);
我试图找出在 C# 中吐出制表符分隔文件内容的最佳方法,以便我可以用它做点什么。
获取数据的最简单方法是什么,以便我可以使用它而无需实际保存文件?
如果这是一个 .net 4.5 应用程序,您可以使用新引入的 ZipArchive 类,它提供了 GetEntry() 方法:
Stream stream = new MemoryStream(file); // file as your byte[]
ZipArchive archive = new ZipArchive(stream )
ZipArchiveEntry entry = archive.GetEntry("ExistingFile.txt");
// Do your logic with the file you get from entry.Open()
entry.LastWriteTime = DateTimeOffset.UtcNow.LocalDateTime;
请参阅ZipArchive 类和ZipArchive.GetEntry 方法。ZipArchive 上有一个名为 Entries 的属性,其中包含只读集合中的所有条目:
public ReadOnlyCollection<ZipArchiveEntry> Entries { get; }
我最终使用了本地 .net 4.5 处理 zip 文件的处理程序,它最终看起来像这样:
Stream stream = new MemoryStream(file); // file as your byte[]
using (ZipArchive archive = new ZipArchive(stream))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
if (entry.FullName.EndsWith(".tsv", StringComparison.OrdinalIgnoreCase))
{
using (stream = entry.Open())
using (var reader = new StreamReader(stream)) {
string output = reader.ReadToEnd();
}
}
}
即使文件名动态更改,这也允许我获取文件。希望这对某人有帮助!
在 C# 中吐出制表符分隔文件内容的最佳方法
byte[] file = Api.getZippedReport(blah, blah);
string fileString = System.Text.Encoding.UTF8.GetString(file);
string[] fileSplit = fileString.Split('\t');
希望这会有所帮助......如果没有,请告诉我。