c# - 在 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;
}
解决方案
我将假设问题是contents.ToArray()
,因为Stream
没有ToArray()
方法。
在这种情况下,您最好使用 a StreamReader
:
using (var reader = new StreamReader(contents))
{
data = reader.ReadToEnd();
}
StreamReader
默认情况下使用Encoding.UTF8
,但如果需要,您可以明确指定它:new StreamReader(contents, Encoding.UTF8)
.
您会注意到,您已经在上面的几行中执行了此操作,以便从unzipper
流中读取。
推荐阅读
- c - 如何在 Direct2D 的位图中将像素设置为透明?
- google-chrome - 当网格行未嵌套在网格中时,NVDA 屏幕阅读器和 Chrome 86/87 似乎不支持 aria-owns 和网格
- azure-devops - Azure DevOps Connect-AzAccount 在证书存储中找不到证书
- google-apps-script - GAS Dashboard 显示其历史上的最新版本,与运行的版本无关
- javascript - Google Analytics:用户对此配置文件没有足够的权限
- microsoft-graph-api - 从 Graph API 获取团队列表现在返回 Auth 错误。两周前还在工作,有什么变化?
- regex - Raku 正则表达式:如何在前瞻中使用捕获组
- java - 在@embeddedId 的一部分上的@OneToMany 实体映射
- javascript - pixi.js - 在图形上绘制线条时的间隙
- php - PgBouncer 和空闲连接