(C#WinForms)编写文件和换行

时间:2010-02-18 11:28:50

标签: c# winforms file-io

我正在对文件进行更改,'source'文件是纯文本文件,但是来自UNIX系统。

我正在使用StreamReader来阅读“来源”文件,然后使用StringBuilder制作并将更改存储到AppendLine()

然后我创建StreamWriter(与Encoding具有相同StreamReader的设置)并写入文件。

现在,当我使用WinMerge比较两个文件时,它会报告回车字符不同。

我该怎么做才能确保回车字符与我正在编辑的文件类型相同?

还应该注意,要修改的文件可以来自任何系统,而不仅仅来自UNIX系统,它们同样可以来自Windows系统 - 所以我想要一种方式使用与原始文件相同类型的回车符插入这些新行

非常感谢所有回复。

:)

2 个答案:

答案 0 :(得分:4)

首先,您需要断言当前文件的换行符是什么。这可能是一个问题,因为给定的文件可以混合不同的行结尾。

然后,您可以设置NewLine的{​​{1}}属性:

StreamWriter

有关行结尾的有趣读物,请查看The Great Newline Schism

答案 1 :(得分:3)

文件使用的行结尾类型与编码无关。听起来你可能需要阅读源文件以确定要开始的行结尾(你必须明确地做;我不相信框架中有任何东西可以提供给你的信息)然后在创建时明确地使用它新文件。 (而不是调用AppendLine,使用行本身调用Append,然后使用适当的行终止符再次调用Append。)

请注意,单个文件可以有多种行结尾 - 一些“\ r \ n”,一些“\ n”和一些“\ r”,所以你必须申请适当的启发式方法(例如选择最常见的行结尾)。