首页 > 解决方案 > 在 C# 中从 MemoryStream 更改为 Stream

问题描述

下面是我传递内存流并读取它并随后执行必要操作的代码。现在要求已经改变,而不是内存流,我将传递 Stream 并开始给我错误。如果这里返回的内容是 Stream 类型,我想知道如何处理下面的方法。现在,当我的内容是 MemoryStream 类型时,它可以正常工作。

public async Task<string> ReadStream(string containerName, string digestFileName, string fileName, string connectionString)
        {
            string data = string.Empty;
            string fileExtension = Path.GetExtension(fileName);
            var contents = await DownloadBlob(containerName, digestFileName, connectionString);
            if (fileExtension == ".gz")
            {

                using (var unzipper = new GZipStream(contents, CompressionMode.Decompress))
                {
                    using (StreamReader reader = new StreamReader(unzipper, Encoding.UTF8))
                    {
                        data = reader.ReadToEnd();
                    }

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

标签: c#

解决方案


我将假设问题是contents.ToArray(),因为Stream没有ToArray()方法。

在这种情况下,您最好使用 a StreamReader

using (var reader = new StreamReader(contents))
{
    data = reader.ReadToEnd();
}

StreamReader默认情况下使用Encoding.UTF8,但如果需要,您可以明确指定它:new StreamReader(contents, Encoding.UTF8).

您会注意到,您已经在上面的几行中执行了此操作,以便从unzipper流中读取。


推荐阅读