2011-08-17 21 views
3

File.Moveコマンドを使用しているときに奇妙な問題が発生しました。プログラムは実際にファイルを移動して名前を変更しますが、ソースファイルが見つからないという例外がスローされます。 - ファイルが移動されたために期待されるもの。File.Moveコマンドで奇妙な問題が発生しました

私は例外をキャッチすればプログラムは正常に動作しますが、なぜこれらの例外が発生するのか不思議です。

マイコード:

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

「FKFinishedBad」に重複はありますか? –

+0

また、移動するファイルを見るためにエクスプローラが開いていないことを確認してください。私はかつて一日を過ごして、そのような遅れた例外を追いかけました –

答えて

1

すべてのファイルが存在しますか? 他のものが正しく処理されている間に、そのうちの1つが欠落している(例外を説明している)場合があります。 File.Existsで移動する前にチェックすることもできます。

また、空のキャッチブロックを使用すると、デバッグ時に頭痛を引き起こす可能性があります。

+0

が同意するならば、File.Moveを実行する前にFile.Existsを常に使用することをお勧めします。これにより、例外がスローされることはありません。 –

+0

私はこれを本当に理解していませんが、解決策です。しかし、すべてのファイルがすでに存在していますので、誰かが私に説明することができれば、私は非常に感謝しています。ところで、ファイルが削除されるべきかどうかをユーザに選択させたので、ファイルが以前に存在していたと確信しています。 – mono

1

は、ここでは第二(またはそれ以下)の半分のためのスレッドを一時停止するようにしてください:

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

をこれはおそらく、あなたはすぐにディレクトリを作成しているという事実に関連していますファイルを移動する。だから、システムに "呼吸"をさせるスレッドを中断してください。

+0

試してみましたが、これは理由ではありませんが、速いのはありがたいです。回答 – mono

2

CPM.prot.FKFinishedBadの各項目が固有であることを確認してください。これが現象の原因になる可能性があります。

また、コードをリファクタリングすることをお勧めします。ディレクトリ行を繰り返す必要はなく、ループの外にある必要があります。

そして、String.FormatとPath.Combineの使用方法を学んでください。

+0

すべてのファイルは一意ではなく、存在します。私が説明しようとしたように、ファイルの移動はうまくいきますが、それ以降は、既存のソースファイルがなくなったために例外が発生しました。 – mono

0

私はちょうどこの問題を経験していますが、同じことをするように見えるFileInfo.MoveToコマンドがあることを理解するのに時間がかかりました。

ただし例外は発生せず、動作します。

1つのことを実行する2つの方法があり、そのうちの1つのみが機能する場合は少しばかげています。

関連する問題