我在C#中有以下代码,它将一行数组写入文件。这与File.WriteAllLines(string, string[]);
之间的区别在于我的最后不会留下额外的换行符。
public static void WriteAllLinesCompact(string path, IEnumerable<string> contents)
{
if (path == null)
throw new ArgumentNullException("path");
if (contents == null)
throw new ArgumentNullException("contents");
bool isFirst = true;
using (FileStream stream = File.OpenWrite(path))
using (StreamWriter writer = new StreamWriter(stream))
{
foreach (string line in contents)
{
if (isFirst)
{
writer.Write(line);
isFirst = false;
continue;
}
writer.Write("\r\n" + line);
}
}
}
问题是它不会在最后一行之后终止文件。例如,如果最后一行是&#34; text = absolute&#34;,则用&#34替换最后一行; tempor&#34;并且使用上述方法保存,文件的最后一行将是&#34; tempor absolute&#34;而不只是&#34; tempor&#34;。
如果您需要更多信息,请与我们联系。
编辑:我会尝试更清楚地解释替换过程中会发生什么。
第1步:使用File.ReadAllLines(字符串)加载任何.txt文件;
第2步:将最后一行替换为比前一行短的行。例如,如果最后一个值的长度为10个字符,则新字符的长度应为7个字符
第3步:使用给定方法保存到以前的相同文件。
答案 0 :(得分:2)
正如评论所建议的那样,在这种情况下的最佳解决方案是保持简单并依赖于可靠的解决方案。例如:
bool isFirst = true;
using (StreamWriter writer = new StreamWriter(path))
{
foreach (string line in contents)
{
if (isFirst)
{
writer.Write(line);
isFirst = false;
continue;
}
writer.Write(Environment.NewLine + line);
}
}
就个人而言,我更倾向于使用writer.WriteLine
,但这违反了OP不包括最终新行的要求。