gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:27:21 26 4
gpt4 key购买 nike

我创建了一个类,负责生成一个文本文件,其中每一行代表“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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com