在C#中逐字符读取文件的最简单方法是什么?
目前,我正在通过调用System.io.file.ReadLine()逐行读取。我看到有一个Read()函数,但它没有;t返回字符。。。
我也想知道如何使用这种方法来检测线的末端。。。有问题的输入文件是CSV文件。。。。
打开一个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
。。。如果这是一个Windows文本文件,那么您可能也需要专门处理r
。
但是,如果您想要的每一行,为什么不直接调用ReadLine
呢?之后,您总是可以对行中的字符进行迭代。。。
以下是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]
}
}