【发布时间】:2015-10-02 03:55:10
【问题描述】:
我目前正在解决一些遗留代码的问题。代码读取 csv,检查数据的有效性,然后将文档写入输出文件。
我目前很难确定进程被挂起的原因。这几乎就像它陷入了无限循环。这个问题每次都发生在同一行(第 262 行)。我已经删除了那条线,它运行到第 1885 行,因为又被挂断了。我继续删除会导致问题进入其文件并测试该文件的行。奇怪的是,当它只是文件中的那些时,errorLine 文件运行良好。这让我觉得问题一定是来自streamwriter。
我将流写入器设置为autoFlush = true。我也在使用using 块,以便处理流写入器的Flush/Close。
这些文件有多种不同的大小,有的只有几行,有的有几千行。
foreach (String e in fileNames)
{
using (StreamWriter sw = new StreamWriter(e.Replace(inputDirectory, outputDirectory), false, Encoding.Unicode))
{
sw.AutoFlush = true;
using (StreamReader sr = new StreamReader(e,Encoding.Unicode))
{
int peek = sr.Peek();
while (peek > -1)
{
if (((char)peek).Equals(textQual))
{
sw.Write(((char)sr.Read()));
peek = sr.Peek();
if (((char)peek).Equals(textQual2))
{
sw.Write(((char)sr.Read()));
peek = sr.Peek();
while (peek > 1)
{
if (((char)peek).Equals((char)0x0A) || ((char)peek).Equals((char)0x0D))
{
check = false;
row++;
if (firstcol == 0)
{
firstcol = col;
}
col = 0;
break;
}
else if (((char)peek).Equals(del))
{
check = false;
break;
}
else if (((char)peek).Equals((char)0x22))
{
sr.Read();
doubleq++;
}
else
{
sw.Write(((char)sr.Read()));
peek = sr.Peek();
break;
}
}
}
}
我正在寻找有关此问题的任何建议,因为我不确定这是从哪里来的。
【问题讨论】:
-
This makes me think the issue must be coming from the streamwriter.但这让我觉得你的代码中存在一些你没有向我们展示的问题。 -
我希望你在某个地方调用“Next()”方法,因为 Peek 所做的只是给你下一个字符,而不会在阅读器中前进!
-
我一次读取字符.. 写入文件时我使用 sr.Read();
-
您发布的内容甚至无法编译。您必须创建一个Minimal Complete Verifiable Example 以便任何人都能够帮助您,甚至让您自己在这方面取得任何进展。
-
@KevinMee 那么你的代码在哪里?您如何解析这些行(很可能存在错误)。这行
int peek = sr.Peek(); while (peek > -1)意义不大。显示您的真实代码
标签: c# file-io streamwriter