Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#File.writeAllines新行反斜杠_C#_.net - Fatal编程技术网

c#File.writeAllines新行反斜杠

c#File.writeAllines新行反斜杠,c#,.net,C#,.net,我有一个列表,我正试图使用file.writeAllines()将其写入文件。列表中的一个字符串来自richTextBox,因此包含新行的\n。但是writeAllines似乎将其解释为在新行上写入,就好像它是字符串列表中的一个单独项目一样。我已经检查了我的代码,可以看到字符串在被拆分之前一直到最后写入代码的所有行。我还尝试在字符串中使用'@'符号,但这也不起作用 是否有人知道如何使writeAllines忽略转义序列?我假设您希望文件中的每个条目都在一行上。所以问题是,您正在写入文件的一个或多

我有一个列表,我正试图使用
file.writeAllines()
将其写入文件。列表中的一个字符串来自
richTextBox
,因此包含新行的
\n
。但是
writeAllines
似乎将其解释为在新行上写入,就好像它是字符串列表中的一个单独项目一样。我已经检查了我的代码,可以看到字符串在被拆分之前一直到最后写入代码的所有行。我还尝试在字符串中使用
'@'
符号,但这也不起作用


是否有人知道如何使
writeAllines
忽略转义序列?

我假设您希望文件中的每个条目都在一行上。所以问题是,您正在写入文件的一个或多个字符串包含换行符,除了WriteAllines写入的换行符之外,还会将换行符写入文件

唯一的解决办法是以编程方式转义WriteAllines输入数据的换行符。对可能包含换行符的每个值执行此操作

string escapedValue = originalValue.Replace("\r", "\\r").Replace("\n", "\\n");
当读回文件时,需要取消每一行的scape

string unescapedValue = escapedValue.Replace("\\r", "\r").Replace("\\n", "\n");

请注意:代码示例并不完美。如果原始字符串包含后跟“r”或“n”的反斜杠,则unescape逻辑将其转换为换行符。您可能还必须转义“\”字符才能避免这种情况。

richTextBox文本中的
\n
不是转义序列,而是实际的
字符。它可能看起来像调试器中的
\n
,但字符串在相应位置包含一个字符

假设您需要将逗号分隔的字符串列表写入文件,其中一个字符串包含逗号:

"quick,brown", "fox", "jumps"
名单将写如下

quick,brown,fox,jumps
而且也无法找出哪个逗号来自字符串

您可以通过在写入文件时用其他字符替换
\n
,然后在读取文件时将其替换回来来解决此问题

// Writing
File.WriteAllLines(@"c:\lines.txt", lines.Select(s => s.Replace('\n', '~')));

// Reading back
var lines = File.ReadAllLines(@"c:\lines.txt")
    .Select(s => s.Replace('~', '\n')))
    .ToArray();
请注意,您选择的字符不得出现在字符串中的任何其他位置。

给定此列表:

var lines = new List<string>(3) {
    "Here's a line",
    "Line \n with a newline character",  // \n here is a newline character
    "Line with a \r character"  // \r here is a carriage return character
};
您可能希望执行以下操作:

var escapedLines =  lines.Select(l => l.Replace("\n", "\\n").Replace("\r", "\\r")).ToList();
File.WriteAllLines("file.txt", escapedLines);

writeAllines
忽略转义序列。我非常确定您的行确实包含换行符,它可能在调试器中显示为
\n
。谢谢,这解决了问题!加载=内容。替换(\\n,“\n”)。替换(\\r,“\r”)。替换(“~”,“\\”;保存=内容。替换(“\\”、“~”)。替换(“\n”、“\\n”)。替换(“\r”、“\\r”);
var escapedLines =  lines.Select(l => l.Replace("\n", "\\n").Replace("\r", "\\r")).ToList();
File.WriteAllLines("file.txt", escapedLines);