【发布时间】:2011-05-15 07:28:03
【问题描述】:
我的程序进入一个目录并搜索 pdf 文件来解析它们。这个程序一直在运行,所以我需要确保不要再次解析同一个文件。
我使用了一个列表来存储文件名,然后检查它们是否在其中。
我的代码在这方面不起作用,如果有人可以看看有什么问题,将不胜感激。
FileInfo[] filePaths = di.GetFiles("*.pdf");
for (int i = 0; i < filePaths.Length; i++)
{
foreach (string fileName in usedFileNames)
{
if (fileName.Equals(filePaths[i].Name))
{
isInList = true;
}
else
{
isInList = false;
}
}
if (isInList == false)
{
PDFReaderChooser chooser = new PDFReaderChooser(filePaths[i].Name);
usedFileNames.Add(filePaths[i].Name);
}
}
【问题讨论】:
-
您的代码不起作用,因为您必须在 "isInList = true;" 之后插入一个 break 语句。
-
@AS-CII:这没有任何意义,因为他稍后会测试
isInList == false;它有效地打破了那里...... -
是的,但每次循环执行时,如果找到文件名,isInList 变量也会更新。示例:#1 - 相等,isInList = true; #2 - NotEqual, isInList = false。在这种情况下,变量假定的最后一个值是假的,因此结果是完全错误的。如果您不信任我,请自己测试代码:)另一种方法是删除 else 语句。
-
我会用一个例子来备份 AS-CII。假设 filePaths 包含一个项目“first.pdf”,而 usedFileNames 包含两个项目“first.pdf”和“second.pdf”。现在让我们跟踪代码。
-
你是完全正确的 AS-CII;我只是没有考虑下一次迭代。
else远远超出了我通常会做的事情,以至于我只是掩饰了它;删除它的替代方法正是我习惯的。