开发者

Strange Problem with File.Move command

I ha开发者_高级运维ve encountered a strange problem when using the File.Move command. The Programm actually moves and renames the file, but then throws me an exception that the sourcefile is not found; - what is expected because the File was moved.

The Program works fine if i catch the Exception but i'm wondering why i get these exception.

My Code:

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


Make sure that each item in CPM.prot.FKFinishedBad is unique - that may be a cause of the phenomenon.

Also, I'd recommend to refactor the code: the directory lines don't need to be repeated and should be outside of the loop.

And please learn to use String.Format and Path.Combine.


Are you sure all of your files exist? It might happen that one of them is missing (which explains the exception), while the others are processed correctly. you can also check them before the move with File.Exists.

Also, be careful when using empty catch blocks, they can cause a lot of headaches when debugging.


Try to suspend a thread for a half a second (or less) here:

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

This is probably related to fact that you create a directory and immediately move a file. So suspend a thread to let "breath" to system.


I have just been experiencing this problem, it took me a while to realise that there is a FileInfo.MoveTo command which appears to do the same thing.

However it doesn't throw an exception, and works.

It is a bit dodgy if there are two ways to do one thing and only one of them works.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜