私は、FileSystemWatcher
のサービスで監視されているフォルダを持っていて、大きなファイルが書き込まれるのを助けるのにこのAnswerを使用しました。FileSystemWatcherが監視しているフォルダで連続してファイルを迅速に作成するにはどうすればいいですか?
しかし、(100MB以上の)連続したファイルの作成があると問題が発生しました。
Q:どうすればこの問題に対処できますか?私のフォルダに書かれた約10個のファイル(それぞれ100MB)のような例です。
注:このフォルダには、ネットワーク経由でアクセスします。ファイルが作成されている可能性がありますが、実際には完全ではありません。 FileSystemWatcher
は完全に書き込まれていなくてもファイルを処理できます。開いたファイルが作成されたファイルがあるかどうかをチェックする例外
private static bool IsFileLocked(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open,
FileAccess.Read, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
//file is not locked
return false;
}
現在のコードをスローするかどうかをチェックするための
現在のコード。
private void FSWatcher_Created(object sender, System.IO.FileSystemEventArgs e)
{
var files = getFiles(FSWatcher.Path); //stores all filenames in the directory in a list
if (files.Count() > 0)
{
foreach (string file in files)
{
FileInfo file_info = new FileInfo(file);
while (IsFileLocked(file_info))
{
Thread.Sleep(5000); //Sleep if file unavailable
}
//code to process the file
}
//some code here
}
}