用C#编写Unix风格的文本文件

dan*_*470 9 c# newline textwriter

我正在尝试用我的C#程序用Unix风格的换行编写一个文本文件.

由于某种原因,以下代码不起作用:

TextWriter fileTW = ...

fileTW.NewLine = "\n";

fileTW.WriteLine("Hello World!");
Run Code Online (Sandbox Code Playgroud)

这也不是:

TextWriter fileTW = ...

fileTW.Write("Hello World! + \n");
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,'\n'都被'\ r \n'替换,我不想要!我一直用十六进制编辑器验证这一点,它显示每行以0x0D0A结尾.

有任何想法吗?

谢谢!

编辑:

对不起大家,误报!

请允许我解释一下......

我的TextWriter正在写一个MemoryStream,然后使用SharpZLib将其添加到tar存档中.事实证明,通过使用WinZIP提取文本文件,它正在用\ r \n替换\n的每个实例.如果我将相同的tar存档复制到我的Ubuntu机器并在那里提取,只有\n就在那里.奇怪的!

对不起,如果我浪费了任何人的时间!谢谢!

Jon*_*eet 17

我无法重现这一点.示例代码:

using System;
using System.IO;

class Test
{
    static void Main()
    {
        using (TextWriter fileTW = new StreamWriter("test.txt"))
        {
            fileTW.NewLine = "\n";            
            fileTW.WriteLine("Hello");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

然后:

c:\users\jon\Test>dir test.txt
 Volume in drive C has no label.
 Volume Serial Number is 4062-9385

 Directory of c:\users\jon\Test

20/10/2011  21:24                 6 test.txt
               1 File(s)              6 bytes
Run Code Online (Sandbox Code Playgroud)

注意大小- 6个字节-这是5"你好"和一个为"\n".没有设置NewLine属性,它是7(两个用于"\ r \n").

你能想出一个类似的简短但完整的程序来证明这个问题吗?你如何确定你的文件后面包含"\ r \n"?