解压缩并读取C#中的.gz(Gzip福彩12选5走势图)

安奇

会员
已加入
2020年12月16日
留言内容
17
编程经验
3-5
下面是我从azure blob容器中读取一个csv福彩12选5走势图,然后调用一个函数来复制表格存储中的内容的方法。
现在,我的要求发生了一些变化,现在.blob容器中的.csv福彩12选5走势图将被压缩为.gz福彩12选5走势图。我想知道,如何修改以下代码,以便可以读取.gz福彩12选5走势图,将其解压缩,然后在传递内容时传递内容
C#:
public async Task<string> ReadStream(string BlobcontainerName, string fileName, string connectionString)
        {
            
            var contents = await DownloadBlob(BlobcontainerName, fileName, connectionString);
            string 数据 = Encoding.UTF8.GetString(contents.ToArray());
            return 数据;
        }

foreach (var files in recFiles)// recFiles are list of CSV files
            {
                string 数据 = await ReadStream(containerName, files.Name, connectionString);}
c#
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,498
地点
悉尼,澳大利亚
编程经验
10+

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,498
地点
悉尼,澳大利亚
编程经验
10+
In that code, what type is contents? Basically, you need to have your 数据 exposed via a Stream of some sort and you then put a GZipStream on top of that, then you read the 数据 from that like you would any other Stream. For example, if contents is a MemoryStream:
C#:
using (var unzipper = new GZipStream(contents, CompressionLevel.Optimal))
{
    // Use unzipper here.
}
 

安奇

会员
已加入
2020年12月16日
留言内容
17
编程经验
3-5
In that code, what type is contents? Basically, you need to have your 数据 exposed via a Stream of some sort and you then put a GZipStream on top of that, then you read the 数据 from that like you would any other Stream. For example, if contents is a MemoryStream:
C#:
using (var unzipper = new GZipStream(contents, CompressionLevel.Optimal))
{
    // Use unzipper here.
}
内容是内存流,福彩12选5走势图名将是test1.csv.gz,在//使用解压缩程序中,我应该提供Decompress(fileName)?
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,498
地点
悉尼,澳大利亚
编程经验
10+
在//使用解压缩器中,我应该提供Decompress(fileName)?
There is no such method. You should read the documentation for the GZipStream class. It works the same as any other Stream from the outside.
 

安奇

会员
已加入
2020年12月16日
留言内容
17
编程经验
3-5
There is no such method. You should read the documentation for the GZipStream class. It works the same as any other Stream from the outside.
我在这里看到你的意思,现在的问题是我看到Unzipper的Read方法与我传递的内容很接近"data"变量?但是我看不到如果我像这样过去就可以工作

C#:
using (var unzipper = new GZipStream(contents, CompressionMode.Decompress))
            {
                //unzipper.ReadByte();
                string 数据 = Encoding.UTF8.GetString(unzipper.ReadByte().ToArray());
            }
 

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,498
地点
悉尼,澳大利亚
编程经验
10+
If you have read the documentation then you know that ReadByte reads one byte. Is that what you want to do? Obviously not. Do some research and learn how to read 数据 from a Stream. It doesn't matter what type of Stream it is as they are all Streams, e.g. reading from a FileStream is the same as reading from a GZipStream.
 

约翰·H

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
1,028
地点
挪威
编程经验
10+
使用CompressionMode.Decompress作为第二个参数是正确的,CompressionLevel用于压缩。
另外,由于这是字符串内容,因此您可以使用StreamReader来读取GZipStream,它具有便捷的ReadToEnd方法(或ReadToEndAsync)。
 

安奇

会员
已加入
2020年12月16日
留言内容
17
编程经验
3-5
我写了这样的代码,并且在编写测试用例时能够读取.gz福彩12选5走势图。在生产中但是我得到错误"流不支持阅读。 (参数“流”)"在线上我正在使用GZip。我现在在做什么错?


C#:
public async Task<string> ReadStream(string containerName, string digestFileName,string fileName, string connectionString)
        {
            string 数据 = string.Empty;
            string fileExtension = Path.GetExtension(fileName);
            var contents = await DownloadBlob(containerName, digestFileName, connectionString);
            if (fileExtension == ".gz")
            {
//Error on this line
                using (var unzipper = new GZipStream(contents, CompressionMode.Decompress))
                {
                    using (StreamReader reader = new StreamReader(unzipper, Encoding.UTF8))
                    {
                        数据 = reader.ReadToEnd();
                    }

                }
            }
            else
            {
               数据 = Encoding.UTF8.GetString(contents.ToArray());
            }
            return 数据;
        }
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
Are you sure the stream contains a valid compressed 数据 stream?
 
最佳 底部