我有一个控制台应用程序,计划处理大量的平面文件。为了提高性能,我提供了使用并行处理的选项。它大大提高了性能。但是,当某些迭代正在复制和删除文件时,它现在会导致奇怪的错误。我不知道为什么会这样或者如何解决它。我不明白为什么迭代所分配的线程会发生冲突,因为每个文件和相关的ID都不同。这是我的基本代码和错误:
result
错误是1)"无法找到文件......"或2)"进程无法访问文件..."
有关如何修复/诊断正在发生的事情的任何建议?
答案 0 :(得分:0)
我认为问题很可能是File.Copy()
的进程仍然处理原始文件,因此File.Delete()
失败了。
我建议您使用File.Move()
,因为这实际上是资源消耗较少。在内部,File.Move()
使用Win32Native.MoveFile
函数,该函数在文件系统上进行重命名。如果使用File.Copy()
,您实际上将复制磁盘上的数据,这将更加耗费资源并且速度更慢。但是,如果您需要保留两份数据(在您的示例中看起来并非如此),则应避免使用File.Move()
。
您所需的代码更改看起来有点像这样:
try
{
File.Move(fileName, fileNameDone);
}
您可能还希望更仔细地查看catch
块并更明确地定位已知错误,即
catch (IOException ex)
{
// specific error type expected
}
希望这会让你更进一步。