文件的奇怪问题.移动命令

本文关键字:移动 命令 问题 文件 | 更新日期: 2023-09-27 18:05:55

我在使用文件时遇到了一个奇怪的问题。移动命令。程序实际上移动并重命名文件,但随后向我抛出一个异常,源文件未找到;

程序工作正常,如果我捕获异常,但我想知道为什么我得到这些异常。

我代码:

  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)  
        {  
        }  
    }  

文件的奇怪问题.移动命令

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

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

请学会使用String。

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

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

尝试在这里暂停一个线程半秒(或更短):

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

这可能与您创建目录并立即移动文件有关。所以挂起一个线程,让"呼吸"到系统。

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

但是它不会抛出异常,并且可以工作。

如果有两种方法做一件事,而其中只有一种有效,那就有点麻烦了。