使用File.WriteAllLines()更改行的行尾;

时间:2016-09-15 15:40:16

标签: c# .net

我尝试在C#中使用此empty()类方法编写文件。

File

行尾为public static void WriteAllLines(string path, IEnumerable<string> contents); ,但我需要CRLF

5 个答案:

答案 0 :(得分:4)

WriteAllLines使用StreamWriter将行写入文件,使用NewLine属性中指定的换行符。

您可以在自己的代码中使用StreamWriter,并使用\n代替\r\n。这样可以避免字符串连接并生成临时字符串:

using (var writer = new StreamWriter(path)) 
{
    writer.NewLine = "\n";
    foreach (var line in contents) 
    {
        writer.WriteLine(line );
    }
}

直接使用StreamWriter也可以使用异步方法:

public async Task MyMethod()
{
    ....
    using (var writer = new StreamWriter(path)) 
    {
        writer.NewLine = "\n";
        foreach (var line in contents) 
        {
            await writer.WriteLineAsync(line);
        }
    }
    ....
}

在编写大型文件时,在服务器和Web应用程序以及要保持最低限度阻止的网站中,这可能是一个很大的好处

答案 1 :(得分:2)

有很多方法可以写入文件,我只是选择不同的文件 - 只有几行:

using (var writer = new StreamWriter(path)) {
    foreach (var line in contents) {
        writer.Write(line + "\n");
    }
}

答案 2 :(得分:0)

您可以自己加入字符串并使用WriteAllLines(),而不是使用WriteAllText()

File.WriteAllText(string path, string.Join("\n", contents) + "\n");

答案 3 :(得分:0)

            var builder = new StringBuilder();
            for (int i = 0; i < 99999; i++)
            {
                builder.Append(i.ToString() + '\n');
            }

            File.WriteAllText("asd.txt", builder.ToString());

这显然是使用样板代码。请注意,使用StringBuilder代替string[]也会更快。

enter image description here

答案 4 :(得分:0)

我会这样做,它避免重写内存并快速工作。这假设您只使用ASCII并且不需要覆盖该文件 - 否则使用不同的编码并相应地更改文件模式。

    public static void WriteAllLines(string path, IEnumerable<string> contents)
    {
        using (var s = new FileStream(path, FileMode.Append))
        {
            foreach (var line in contents)
            {
                var bytes = Encoding.ASCII.GetBytes($"{line}\r");
                s.Write(bytes,0,bytes.Length);
            }
            s.Flush();
            s.Close();
        }
    }