繁体   English   中英

StreamWriter 在文件末尾写了一个奇怪的行

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM