从字节数组中提取压缩的制表符分隔文件的内容

时间:2013-05-10 00:10:48

标签: c# .net api sharpziplib

我已经看到了这个问题的一些答案,但没有完全像我正在努力的,我遇到了一些麻烦。

基本上,我使用的API在字节数组中返回数据,如下所示:

byte[] file = Api.getZippedReport(blah, blah);

我正在尝试找出在C#中吐出制表符分隔文件内容的最佳方法,以便我可以用它做点什么。

获取数据的最简单方法是什么,以便我可以使用它而无需实际保存文件?

3 个答案:

答案 0 :(得分:1)

如果这是.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 ClassZipArchive.GetEntry Method。 ZipArchive上有一个名为Entries的属性,它包含只读集合中的所有条目:

public ReadOnlyCollection<ZipArchiveEntry> Entries { get; }

答案 1 :(得分:0)

  

在C#

中吐出制表符分隔文件内容的最佳方法
byte[] file = Api.getZippedReport(blah, blah);
string fileString = System.Text.Encoding.UTF8.GetString(file);
string[] fileSplit = fileString.Split('\t');

希望这会有所帮助......如果没有,请告诉我。

答案 2 :(得分:0)

我最终使用zip文件的原生.net 4.5处理程序,结果看起来像这样:

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

即使文件名动态变化,这也允许我获取文件。希望这有助于某人!