我为用户编写了一个操作来下载生成的 xml,而不必将其写入服务器磁盘,但将其保存在内存中。
这是我的代码:
public FileContentResult MyAction()
{
MemoryStream myStream = new MemoryStream();
XDocument xml = GenerateXml(...);
xml.Save(myStream );
myStream .Position = 0;
return File(myStream.GetBuffer(), "text/xml", "myFile.xml");
}
一切似乎工作正常,XML 是正确的,我可以下载文件,但我不明白为什么我的文件末尾有 691920 个“nul”字符(这些字符的数量似乎与长度有关的xml):
他们是从哪里来的?我怎样才能摆脱它们?
[更新] 我试过这个:
public FileContentResult MyAction()
{
XDocument xml = GenerateXml(...);
byte[] bytes = new byte[xml.ToString().Length * sizeof(char)];
Buffer.BlockCopy(xml.ToString().ToCharArray(), 0, bytes, 0, bytes.Length);
return File(bytes, "text/xml", "myFile.xml");
}
而且我没有得到“nul”字符。所以我想是 MemoryStream 在文件末尾添加了额外的字符。因此,在我的示例中,第二个代码解决了我的问题。
但我也生成了一个我无法阅读的 Word 文档(xxx.docx 无法打开,因为内容有问题)。我想我在这里有同样的问题,内存流在文件末尾添加了额外的字符并损坏了它。