mono
mono

Reputation: 131

Strange Problem with File.Move command

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

Upvotes: 4

Views: 1710

Answers (4)

zeristor
zeristor

Reputation: 429

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.

Upvotes: 0

Agoston Berger
Agoston Berger

Reputation: 26

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.

Upvotes: 1

Olaf
Olaf

Reputation: 10247

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.

Upvotes: 2

Tigran
Tigran

Reputation: 62265

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.

Upvotes: 1

Related Questions