我想用C#中的File
類方法編寫一個文件。用File.WriteAllLines()更改一行的行尾;
public static void WriteAllLines(string path, IEnumerable<string> contents);
線的終點是CRLF
但我需要這是LF
。
我想用C#中的File
類方法編寫一個文件。用File.WriteAllLines()更改一行的行尾;
public static void WriteAllLines(string path, IEnumerable<string> contents);
線的終點是CRLF
但我需要這是LF
。
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);
}
}
....
}
寫大時,這是一個很大的好處文件,在服務器和網絡應用程序和網站,你想保持至少阻止
有寫文件的許多方面,我只是用一個不同的走了 - 只有幾行:
using (var writer = new StreamWriter(path)) {
foreach (var line in contents) {
writer.Write(line + "\n");
}
}
而不是使用WriteAllLines()
的,你可以自己使用,並加入了串WriteAllText()
:
File.WriteAllText(string path, string.Join("\n", contents) + "\n");
這會在內存中產生一個巨大的字符串,所以我會避免這種情況,除非你保證你的文件很小。另外,你需要'\ n',而不是'\ r'。 –
@JoeEnos修正,謝謝。此外,它是文字,所以我非常懷疑這是巨大的。 – itsme86
@ itsme86想象一個日誌文件。或者一個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();
}
}
是否因爲您的環境具有LF作爲換行符號,如Linux?你檢查Environment.Newline常量嗎? – Neolisk