4

このコードは機能します:

File.Copy(file, Path.Combine(destinationFolder, file), true);

これは動作しません:

foreach (string file in Directory.GetFiles(sourceFolder))
{
    File.Copy(file, Path.Combine(destinationFolder, file), true);
}

それは最初のファイルに例外を与えます:

別のプロセスによって使用されているため、プロセスはファイル'C:\ Users \ Ricardo \ Desktop \ Palomas\IMG_20130215_134854.jpg'にアクセスできません。

なんで?Directory.GetFilesまたはDirectory.EnumerateFilesがファイルをロックしているように見えます

4

2 に答える 2

3

foreachの単純なエラー。

同じ場所にコピーして貼り付けようとしていました。

このように修正しました:

    foreach (string file in Directory.EnumerateFiles(sourceFolder))
    {
        File.Copy(file, Path.Combine(destinationFolder, Path.GetFileName(file)), true);
    }
于 2013-03-16T00:17:04.340 に答える
1

同じ問題がありました-フォルダでDirectory.GetFilesを実行してから、各ファイルのパス/名前をSQL Serverの呼び出しに渡してファイルを一括ロードし、別のプロセスエラーによってファイルがロックされていました。Directory.GetFilesがファイルを一時的にロックしているように見えます。ロックが解除される速度は、フォルダーが置かれているマシン上のオペレーティングシステムの速度によって異なります。ロックを解除するのは少し遅れるかもしれません。私のアプリケーションでは、Directory.GetFilesステートメントの後で他の何かの前に30秒の休止{Thread.Sleep(30000)}を置きました。これで問題は解決しました。

于 2016-07-29T16:59:16.810 に答える