2

画像がサーバーにアップロードされた後、コードはそれをユーザーの詳細によって指定された特定のフォルダーに移動します。ファイルの移動が速すぎるか、アップロードファイルがまだ使用されているため、9/10 関数が移動を実行しないと思うことがあります。

「待機」を追加する方法、またはファイルが使用中かどうかを確認し、ファイルの移動が許可されるまで while ループを実行する方法はありますか?

私のコントローラーの現在の移動機能:

while (!File.Exists(uploadedPath))
{
}
File.Move(uploadedPath, savePath);

PS。while ループがスタックしてタイムアウトしないように、カウンターを追加するつもりです。

4

2 に答える 2

3

ファイルを受信するコードを制御できる場合は、ファイルが完全に受信されたときに移動コードに通知するように更新します。または、そこからファイルを移動するか、最終的にあるべき場所にファイルを保存します。

そうしないと、ハックになります。あなたが必要

  1. ファイルを移動しようとすると、
  2. 動かない場合は例外をキャッチする
  3. Thread.Sleep を数秒間使用する
  4. 1 に移動

線に沿った何か:

bool success = false;
for (var count = 0; !success && count < 10; ++count)
{
    try
    {
        File.Move(uploadedPath, savePath);
        success = true;
    }
    catch (IOException)
    {
        Thread.Wait(1000);
    }
}

ファイルをまったく移動できない状況にも対処する必要があります。したがって、これはハックであり、移動中のコードを通知する他の方法がある場合は、一般的に行うべきではありません。

また、次の点に注意してください。

File.Move msdn から:

ディスク ボリューム間でファイルを移動しようとして、そのファイルが使用中の場合、ファイルは移動先にコピーされますが、移動元からは削除されません。

つまり、ファイルは移動後も受信したファイル ディレクトリに残ります。

于 2013-05-01T04:09:50.967 に答える