ファイルウォッチャーを使用して、ファイルがディレクトリに作成されたかどうかを確認しています。もしそうなら、それを開いて別のディレクトリに移動したいと思います。
私のアプローチはFileShare.None
、排他的アクセスを確保するためにも使用します。私がしたことは次のとおりです。
class Program
{
private static void Main(string[] args)
{
FileSystemWatcher fileWatcher = new FileSystemWatcher();
fileWatcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName;
fileWatcher.Created += fileWatcher_Created;
fileWatcher.EnableRaisingEvents = true;
Console.ReadLine();
}
private static void fileWatcher_Created(object sender, FileSystemEventArgs e)
{
WorkOnFile(e.FullPath);
}
//must be done completely. How do I ensure it?
private static void WorkOnFile(string fileName)
{
using (FileStream f = File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
Thread.Sleep(40000); // some long operations
}
}
}
WorkOnFile()
肝心なのは、 1 つのファイルに対して完全に 1 回だけ実行する必要があるということです。ファイルがコピーされている場合は、ファイルWorkOnFile()
が完全にコピーされ、それを使用しているプロセスがなくなるまで、もう一度呼び出す必要があります。
どうすれば到達できますか?