C# 为什么返回MemoryStream设置结束位置
我注意到返回MemoryStream会将其位置重置为“最后”位置。为什么呢 在工作方法中测试时,在返回之前,我显式地将位置设置为0C# 为什么返回MemoryStream设置结束位置,c#,asp.net-core,C#,Asp.net Core,我注意到返回MemoryStream会将其位置重置为“最后”位置。为什么呢 在工作方法中测试时,在返回之前,我显式地将位置设置为0 myStream.position = 0; // I allso tried myStream.Seek(0, SeekOrigin.Begin); 但在两种情况下检查位置时,位置未设置为0 编辑(认为这是一个更理论化的问题,所以我没有费心添加所有代码,但现在开始) 然后我试着测试这个方法 [Test] public Task GenerateOpenXmlFi
myStream.position = 0; // I allso tried myStream.Seek(0, SeekOrigin.Begin);
但在两种情况下检查位置时,位置未设置为0
编辑(认为这是一个更理论化的问题,所以我没有费心添加所有代码,但现在开始)
然后我试着测试这个方法
[Test]
public Task GenerateOpenXmlFileAsStremTest()
{
using (Context context = new Context (_options))
{
context.Database.EnsureCreated();
}
using (Context context = new Context (_options))
{
_target = new Service(_mapper, _mockedLogger.Object, _dbContext, _mockedNotificationService.Object);
MemoryStream result = _target.GenerateOpenXmlFileAsStrem();
Assert.NotNull(result);
Assert.Equal(0, result.Position); // somehow this is not true
}
}
如果SpreadsheetDocument在Dispose时写入流,则会导致该结果。在重新定位流之前,请尝试显式调用Flush/Close/Dispose,例如:
document.Dispose();
memoryStream.Position = 0;
return memoryStream;
每当有东西从流中读取(或写入)时,位置就会改变。在普通方法中,如果
返回流,则流不会发生任何变化,但是由asp.net控制的方法可以从流中读取数据以访问其数据。
document.Dispose();
memoryStream.Position = 0;
return memoryStream;