.NET File.WriteAllLines在文件末尾留下空行

use*_*862 9 .net arrays line

当我使用System.IO.File.WriteAllLines保存String []数组的内容时,在文件末尾总是留下一个空行.例如:

System.IO.File.WriteAllLines(Application.dataPath + "/test.txt",["a", "b", "c"]);
Run Code Online (Sandbox Code Playgroud)

生成文件(没有下划线):

a
b
c
_
Run Code Online (Sandbox Code Playgroud)

已经有这样一个主题:.Net File.WriteAllLines中的空行,是一个错误吗?但是,autor说"我认为我的数据存在问题,这是我的问题,但不是WritAllLines",它被关闭为"过于本地化"(?!?).

这是一个错误?我怎样才能轻松摆脱它(现在我只是在再次阅读文件时忽略它)?

Dan*_*ker 14

正如其他人所指出的那样,这就是它的运作方式.这是一个没有额外换行符的方法:

public static class FileExt
{
    public static void WriteAllLinesBetter(string path, params string[] lines)
    {
        if (path == null)
            throw new ArgumentNullException("path");
        if (lines == null)
            throw new ArgumentNullException("lines");

        using (var stream = File.OpenWrite(path))
        using (StreamWriter writer = new StreamWriter(stream))
        {
            if (lines.Length > 0)
            {
                for (int i = 0; i < lines.Length - 1; i++)
                {
                    writer.WriteLine(lines[i]);
                }
                writer.Write(lines[lines.Length - 1]);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

FileExt.WriteAllLinesBetter("test.txt", "a", "b", "c");
Run Code Online (Sandbox Code Playgroud)

写道:

aenter
benter
c


小智 9

您还可以使用 WriteAllText 保存文件并手动连接行数组,例如:

File.WriteAllText(file, String.Join("\r\n",correctedLines));
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 8

WriteAllLines方法将写出数组中的每一行,然后换行.这意味着您将始终在文件中获得此"空行".

您链接的帖子中的要点是,在运行时ReadAllLines将行视为由换行符终止的字符.因此,当您在刚刚编写的文件上使用read方法时,您应该返回完全相同的行.

如果您以不同的方式阅读文件,则必须自己处理换行符.

基本上你所看到的是预期行为.