Dav*_*ers 1 c# encoding newline streamreader line-by-line
我需要能够获取具有未知编码的文本文件(例如,UTF-8,UTF-16,...)并逐行复制,随时进行特定更改.在这个例子中,我正在改变编码,但是这种处理还有其他用途.
我无法弄清楚的是如何确定最后一行是否有换行符!有些程序关心具有这些记录的文件之间的区别:
Rec1<newline>
Rec2<newline>
Run Code Online (Sandbox Code Playgroud)
和这些文件:
Rec1<newline>
Rec2
Run Code Online (Sandbox Code Playgroud)
如何区分我的代码以便我采取适当的措施?
using (StreamReader reader = new StreamReader(sourcePath))
using (StreamWriter writer = new StreamWriter(destinationPath, false, outputEncoding))
{
bool isFirstLine = true;
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
if (isFirstLine)
{
writer.Write(line);
isFirstLine = false;
}
else
{
writer.Write("\r\n" + line);
}
}
//if (LastLineHasNewline)
//{
// writer.Write("\n");
//}
writer.Flush();
}
Run Code Online (Sandbox Code Playgroud)
注释掉的代码是我想要的,但我无法弄清楚如何设置条件lastInputLineHadNewline!请记住,我没有输入文件编码的先验知识.
请记住,我没有输入文件编码的先验知识.
这是要解决的根本问题.
如果文件可以使用任何编码,那么就没有"逐行"读取的概念,因为你不可能知道行结尾是什么.
我建议你先解决这个问题,剩下的就很容易了.现在,在不知道上下文的情况下,很难说这是否意味着您应该要求用户进行编码,或者启发式地检测它或其他东西 - 但我不会在您完全理解之前开始尝试使用数据.
| 归档时间: |
|
| 查看次数: |
539 次 |
| 最近记录: |