File.Move命令的奇怪问题

时间:2011-08-17 10:03:35

标签: c# .net

使用File.Move命令时遇到了一个奇怪的问题。程序实际上移动并重命名文件,但然后抛出一个异常,找不到源文件; - 因为文件被移动了所期望的内容。

如果我抓住了Exception,程序运行正常,但我想知道为什么我会遇到这些异常。

我的代码:

  foreach (string str in CPM.prot.FKFinishedBad) 
  {   
        try  
        {  
          string dir = System.Configuration.ConfigurationSettings.AppSettings["ResultDir"] + "\\" + DateTime.Now.ToString("yyyy_MM_dd") + "_Bearbeitete Protokolle";  
        if (!Directory.Exists(dir))  
        {  
          Directory.CreateDirectory(dir);  
        }  
          File.Move(System.Configuration.ConfigurationSettings.AppSettings["ResultDir"] + "\\" +  str + "_" + CPM.LastJob + ".txt", dir + "\\" + "\\" + str + "_" + CPM.LastJob + "_Nachproduziert" + ".txt");  
        }  
        catch (Exception e)  
        {  
        }  
    }  

4 个答案:

答案 0 :(得分:2)

确保CPM.prot.FKFinishedBad中的每个项目都是唯一的 - 这可能是造成这种现象的原因。

另外,我建议重构代码:目录行不需要重复,应该在循环之外。

请学习使用String.Format和Path.Combine。

答案 1 :(得分:1)

尝试暂停线程半秒(或更短):

if (!Directory.Exists(dir))  
{  
  Directory.CreateDirectory(dir);  
  //suspend thread for 0.5 sec
}  

这可能与您创建目录并立即移动文件有关。所以暂停一个线程让“呼吸”到系统。

答案 2 :(得分:1)

您确定所有文件都存在吗? 可能会发生其中一个缺失(这解释了异常),而其他正确处理。你也可以在使用File.Exists移动之前检查它们。

另外,使用空的catch块时要小心,在调试时会引起很多麻烦。

答案 3 :(得分:0)

我刚刚遇到这个问题,我花了一段时间才意识到有一个FileInfo.MoveTo命令似乎做了同样的事情。

然而,它不会引发异常,并且有效。

如果有两种方法可以完成一件事,而且只有一种方法有效,那就有点狡猾了。