2017-01-25 10 views
2

私はある場所、例えばC:\ Tempに動画のフォルダを持っています。ディレクトリを別のディレクトリに移動するとファイルにアクセスできますか?

"処理"フォルダから移動したディレクトリを読み取るクローラがあり、極端な状況では恐れているので、ディレクトリ全体を "処理"フォルダに移動します。クローラは、まだ完全にコピーされていないディレクトリからの読み取りを試みる可能性があります。

私は自分でテストしようとしましたが、正常に動作していたようです(私は正常に移動したファイルを処理しました)が、プロダクション設定に移行する前にこの状況を確認したいと思います。

TLDR;私はフォルダ内に2つのビデオを持っていて、それらを別の場所に移動すると同時にそのディレクトリから別のスレッドで読み込もうとしていますが、コピーがまだ完了していなくても他のスレッドがディレクトリにアクセスできる可能性があります"?

+1

を試みますが、私は、ファイルがコピーされていると思われますファイルロックのためにアクセスできない –

+1

新しい場所を読んでいるだけであれば、フォルダ自体が存在しない限り、すべてが大丈夫でしょうか。しかし、コピーされるファイルには、新しいディレクトリ内からファイルを読み取ることができないようにロックされている場合があります。 – HimBromBeere

+0

私はちょっと別の質問をします。コピーが終わるまでディレクトリ全体をロックしながらディレクトリを移動することは可能ですか? –

答えて

1

そのディレクトリのファイルが移動されている間に(アクセス権を脇に)フォルダにアクセスできない理由はありません。フォルダをクロールして、別のプログラムによってコピー/オープンされているためにロックされているファイルを実行している場合、そのファイルを管理する拡張メソッドとして以下を使用します。

F =ファイル、C =現在の試行、M = maxのは、あなたがそのディレクトリから読み取ることができるようになります

public static bool IsFileLocked(this FileInfo f, int c, int m) 
{ 
    if (c > m) { return true; } 
    FileStream fs = null; 
    try 
    { 
     fs = f.Open(FileMode.Open, FileAccess.Read, FileShare.None); 
    } 
    catch (IOException) 
    { 
     Thread.Sleep(500); 
     return IsFileLocked(f, c + 1, m); 
    } 
    finally 
    { 
     fs?.Close(); 
    } 
    return false; 
} 
使用で

var f = new FileInfo(@"C:/Current/Path/To/File.txt"); 
if (f.IsFileLocked(0, 50)) { 
     //The file is locked.     
} 
関連する問題