【发布时间】:2022-11-04 21:55:30
【问题描述】:
我想将字符串保存到文件中(例如,不将 \n 设置为实际的新行)。
这是我的代码:
using (var fs = new FileStream(path, FileMode.Truncate)
{
var sw = new StreamWriter(fs);
List<string> keys = texts.Keys.ToList();
List<string> vals = texts.Values.ToList();
for (int i = 0; i < texts.Count; i++)
{
sw.WriteLine(keys[i] + ";" + vals[i]);
}
sw.Close();
}
如您所见,我正在尝试将名为texts 的字典转换为文件。
在值中,我可以有line1\n\tline2。我需要以某种方式制作,以便转义字符不会转换为它们的实际形式。
我将不胜感激任何帮助...
编辑:
尝试做sw.WriteLine(keys[i].Replace(@"\", "|") + ";" + vals[i].Replace(@"\", "|");。它不会保存为|n 或|t...
编辑2: 您可以使用这种超大算法将 Literal 转换回其原始形式(不包括所有转义字符)
private static string ToNormal(string value)
{
string output = "";
bool escapeChar = false;
for (int i = 0; i < value.Length; i++)
{
if (escapeChar)
{
switch (value[i].ToString())
{
case "n":
output += "\n";
break;
case "t":
output += "\t";
break;
case "a":
output += "\a";
break;
case @"\":
output += "\\";
break;
}
escapeChar = false;
}
else if (value[i] == '\\')
{
escapeChar = true;
continue;
}
else
{
output += value[i];
}
}
return output;
}
【问题讨论】:
-
目标是编写 csv 文件吗?如果是这样,您可能并不是真的想转义换行符,而是将所有文本封装在一个单元格中。或者只使用 json 并让库处理一切。