我正在用 C# 编写自己的 XML 和 CSV 解析器(为了好玩),并且在让我的流工作时遇到了一些麻烦。基本上我想按字符加载文件并以这种方式读取它。我通常会做 readline,但这对于我现在正在做的事情和我将来打算做的事情来说有点太简单了。它似乎确实有效,但它要么真的很慢,要么在无限循环中工作。输出似乎还可以,但需要一段时间。
我一直在 MSDN 上进行大量阅读以尝试理解 Streaming,但我无法理解当前的流位置。
List<string> s = new List<string>();
StreamReader r = File.OpenText(f.FullName);
StreamWriter w = File.CreateText(@"C:\Users\XXXXX\Desktop\streamoutput.txt");
char[] buffer = new char[1024];
int count = 0;
string csvChunk = "";
while (r.Peek() >= 0) //Before end of file?
{
r.Read(buffer, 0, buffer.length); //Attempting to load in 1024 characters
foreach (char c in buffer)
{
if(c == ','){
s.Add(csvChunk);
csvChunk = "";
}
else
{
csvChunk += c;
w.Write(c); //Write output to file (so I can see what is going on)
count++; //Number of chars done
}
}
Console.Clear();
Console.WriteLine("Written " + count + " characters "); //Just to keep track of whats up
}
r.Close();
w.Close();
如果您能澄清以下内容,我将不胜感激:
- 为什么这种方法会这么慢?
- 在第二个循环中,是否自动从前一个位置读取 + 1024 个字符?
- 当我到达流的末尾附近并且当剩下 <1024 时它试图将 1024 个字符放入缓冲区时会发生什么?