C# 使用File.writeAllines()更改行的行尾;
我正试图用C语言编写一个文件,使用这个文件类方法C# 使用File.writeAllines()更改行的行尾;,c#,.net,C#,.net,我正试图用C语言编写一个文件,使用这个文件类方法 public static void WriteAllLines(string path, IEnumerable<string> contents); 行的末尾是CRLF,但我需要它是LF。写入文件的方法有很多种,我只需要使用不同的方法-只有几行: using (var writer = new StreamWriter(path)) { foreach (var line in contents) { w
public static void WriteAllLines(string path, IEnumerable<string> contents);
行的末尾是CRLF,但我需要它是LF。写入文件的方法有很多种,我只需要使用不同的方法-只有几行:
using (var writer = new StreamWriter(path)) {
foreach (var line in contents) {
writer.Write(line + "\n");
}
}
您可以自己连接字符串并使用WriteAllText,而不是使用WriteAlline:
这显然与样板代码有关。请记住,使用StringBuilder而不是string[]也会更快
WriteAllines使用StreamWriter,使用属性中指定的换行符字符串将行写入文件
您可以在自己的代码中使用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应用程序和网站中编写大型文件时,这可能是一个很大的好处,在这些网站中,您希望将阻塞保持在最小值我同意这一点,它可以避免重新写入内存,而且工作速度很快。这假设您只使用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();
}
}
这会在内存中生成一个巨大的字符串,所以除非你保证你的文件很小,否则我不会这样做。另外,您需要\n,而不是\r.@JoeEnos已修复,谢谢。而且,它是文本,所以我非常怀疑它有那么大。@itsme86想象一下一个日志文件。或者一个网络服务器。即使流量适中,内存使用翻倍也会造成很大危害。或者考虑另一方面:通过加入你最终购买一个更大的云VM来服务相同的流量,因为你的环境有LF作为换行符号,比如Linux?你检查过Environment.Newline常量了吗?既然可以立即写出,为什么还要在内存中创建字符串呢?
public async Task MyMethod()
{
....
using (var writer = new StreamWriter(path))
{
writer.NewLine = "\n";
foreach (var line in contents)
{
await writer.WriteLineAsync(line);
}
}
....
}
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();
}
}