c# - StreamWriter 在行尾添加额外的\r

标签 c# .net visual-studio-2010 iis streamwriter

我创建了一个类,负责生成一个文本文件,其中每一行代表“MyDataClass”类对象的信息。下面是我的代码的简化:

public class Generator
{
    private readonly Stream _stream;
    private readonly StreamWriter _streamWriter;
    private readonly List<MyDataClass> _items;

    public Generator(Stream stream)
    {
        _stream = stream;
        _streamWriter = new StreamWriter(_stream, Encoding.GetEncoding("ISO-8859-1"));
    }

    public void Generate()
    {
        foreach (var item in _items)
        {
            var line = AnotherClass.GetLineFrom(item);

            _streamWriter.WriteLine(line);
        }

        _streamWriter.Flush();
        _stream.Position = 0;
    }
}

我这样称呼这个类:

using (var file = new FileStream("name", FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
    new Generator(file).Generate();
}

当我在 visual studio 上运行应用程序时(我使用运行 (Ctrl+F5)、调试 (F5)、调试和 Release模式进行测试)一切都按计划进行。但是我在 IIS 服务器上发布了应用程序,现在 StreamWriter 类在行尾之前放置了一个额外的\r 。

检查两个生成文件的十六进制读数:

在 Visual Studio 中运行: http://www.jonataspiazzi.xpg.com.br/hex_vs.bmp

在 IIS 中运行: http://www.jonataspiazzi.xpg.com.br/hex_iis.bmp

一些我已经检查过的东西:

Write the line variable (in var line = AnotherClass.GetLineFrom(item);) in a log to see if an extra '\r' is uncluded by the class AnotherClass.

没有产生任何结果, 中的最后一个字符是预期的常规字符(在上面的示例中是一个空格)。

Write another code to see if the problem is general for all IIS StreamWriter instances.

我试过这个:

var ms = new MemoryStream();
var sw = new StreamWriter(ms, Encoding.GetEncoding("ISO-8859-1"));

sw.WriteLine("Test");
sw.WriteLine("Of");
sw.WriteLine("Lines");

sw.Flush();
ms.Position = 0;

在这种情况下,代码适用于 visual studio 和 IIS。

我在这里待了 3 天,我已经尝试了我的大脑能想到的一切。有人知道我可以尝试什么吗?

更新

变得更奇怪!我尝试将行 _streamWriter.WriteLine(line); 替换为:

_streamWriter.Write(linhaTexto + Environment.NewLine);

更糟糕的是:

_streamWriter.Write(linhaTexto + "\r\n");

两者都不断生成额外的 \r 字符。

我尝试用这个替换:

_streamWriter.Write(linhaTexto + "#\r\n#");

并得到:

http://www.jonataspiazzi.xpg.com.br/hex_sharp.bmp

最佳答案

根据 MSDN,WriteLine

Writes data followed by a line terminator to the text string or stream.

你的最后一行应该是

 _streamWriter.Write(line);

将它放在你的循环之外并改变你的循环,这样它就不会管理最后一行。

关于c# - StreamWriter 在行尾添加额外的\r,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29705703/

相关文章:

c# - 更改安装项目的 ProductVersion 的预构建事件在构建之后才会生效

sql-server - 创建 MVC4 成员数据库

javascript - 使用 System.Web.Script.Serialization 从 C# 集合创建 JSON 数组

visual-studio - 是否可以从 Visual Studio 2010 创建 Office 2003 VSTO 加载项?

c# - 在 Roslyn 诊断分析器中检测隐式转换

c# - .NET 的 headless (headless) webkit

c# - 特定时间间隔内的重复任务?

.net - 使用 "right".NET Framework 版本

c# - Excel 卡在消息框询问是否要保存工作簿的位置

c# - 从谷歌浏览器打开 Internet Explorer