在C#中逐个字符读取文件的最简单方法是什么?
目前,我正在通过调用System.io.file.ReadLine()逐行阅读。我看到有一个Read()函数,但它没有;返回一个字符...
我还想知道如何使用这种方法检测一行的结尾......有问题的输入文件是一个CSV文件....
答案 0 :(得分:5)
打开TextReader
(例如File.OpenText
- 请注意File
是一个静态类,因此无法创建它的实例)和反复拨打Read
。这将返回int
而不是char
,因此它也表示文件结尾:
int readResult = reader.Read();
if (readResult != -1)
{
char nextChar = (char) readResult;
// ...
}
或循环:
int readResult;
while ((readResult = reader.Read()) != -1)
{
char nextChar = (char) readResult;
// ...
}
或者更加时髦的善良:
public static IEnumerable<char> ReadCharacters(string filename)
{
using (var reader = File.OpenText(filename))
{
int readResult;
while ((readResult = reader.Read()) != -1)
{
yield return (char) readResult;
}
}
}
...
foreach (char c in ReadCharacters("foo.txt"))
{
...
}
请注意,默认情况下,File.OpenText
都将使用UTF-8编码。如果这不是您想要的,请明确指定编码。
编辑:要查找某一行的结尾,您需要检查该字符是否为\n
...您可能也想要特别处理\r
,如果这是一个Windows文本文件。
但是如果你想要每个行,为什么不调用ReadLine
?您可以随后迭代该行中的字符...
答案 1 :(得分:0)
以下是msdn
的摘录using (StreamReader sr = new StreamReader(path))
{
char[] c = null;
while (sr.Peek() >= 0)
{
c = new char[1];
sr.Read(c, 0, c.Length);
// do something with c[0]
}
}