![](/img/trans.png)
[英]C# - How to Stop StreamWriter Writing Blank Line at the End of a File?
[英]StreamWriter is writing a weird line at the end of a file
我正在使用 StreamWriter 将字符串写入内存,然后通过 ASP.Net Core Web API 中的 IActionResult 将其作为文件返回,我遇到了一个奇怪的问题,我得到了一行无法辨认的字符在输出文件的末尾...
这是我正在谈论的图像:
第513行的文字不应该在那里......我认为它与编码有关,但我对编码或文本了解不多,所以我希望更有知识的人可以帮忙。 ..
这是我的代码:
[HttpGet("download/{fileId}")]
public IActionResult DownloadFile(int fileId)
{
if (!_fileRepository.FileExists(fileId))
return NotFound();
var file = _fileRepository.GetFile(fileId);
if (!ModelState.IsValid)
return BadRequest(ModelState);
string BAIFile = ParseModelToFile(file);
using (MemoryStream ms = new MemoryStream())
{
using (var sw = new StreamWriter(ms, new UnicodeEncoding()))
{
sw.Write(BAIFile);
sw.Flush();
sw.Close();
return File(ms.GetBuffer(), "text/plain", DateTime.Now.ToShortDateString() + ".BAI");
}
}
}
为了提高性能, MemoryStream
尝试限制它调整其内部缓冲区大小的频率。 所以,它所做的是,每次你写入时,如果它需要扩展它的存储容量,它会调整容量超过需要的大小。 这样,下一次写入也不应导致调整大小。
这意味着,例如,它的缓冲区可能是 2048 字节,而您的实际内容只有 1900 字节。 最后 148 个字节? 那就是你看到的垃圾。
您将获得整个缓冲区,这实际上比您的实际内容要长。 请改用ToArray()
。 这将返回缓冲区的副本,仅包含您的实际内容,而不是剩余的额外空间。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.