C# Language
FileSystemWatcher
サーチ…
構文
- public FileSystemWatcher()
- パブリックFileSystemWatcher(文字列パス)
- パブリックFileSystemWatcher(文字列パス、文字列フィルタ)
パラメーター
パス | フィルタ |
---|---|
標準またはUNC(Universal Naming Convention)表記で監視するディレクトリ。 | 見るファイルの種類。たとえば、「* .txt」はすべてのテキストファイルの変更を監視します。 |
基本FileWatcher
次の例では、実行時に指定されたディレクトリを監視するFileSystemWatcher
を作成しFileSystemWatcher
。このコンポーネントは、 LastWriteおよびLastAccess時間の変更、ディレクトリ内のテキストファイルの作成、削除、または名前変更を監視するように設定されています。ファイルが変更、作成、または削除されると、ファイルへのパスがコンソールに出力されます。ファイルの名前が変更されると、古いパスと新しいパスがコンソールに出力されます。
この例では、System.DiagnosticsとSystem.IOの名前空間を使用します。
FileSystemWatcher watcher;
private void watch()
{
// Create a new FileSystemWatcher and set its properties.
watcher = new FileSystemWatcher();
watcher.Path = path;
/* Watch for changes in LastAccess and LastWrite times, and
the renaming of files or directories. */
watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite
| NotifyFilters.FileName | NotifyFilters.DirectoryName;
// Only watch text files.
watcher.Filter = "*.txt*";
// Add event handler.
watcher.Changed += new FileSystemEventHandler(OnChanged);
// Begin watching.
watcher.EnableRaisingEvents = true;
}
// Define the event handler.
private void OnChanged(object source, FileSystemEventArgs e)
{
//Copies file to another directory or another action.
Console.WriteLine("File: " + e.FullPath + " " + e.ChangeType);
}
IsFileReady
よくある間違いFileSystemWatcherで始まる多くの人は、ファイルが作成されるとすぐにFileWatcherイベントが発生することを考慮していません。ただし、ファイルが終了するまでに時間がかかることがあります。
例 :
たとえば、1 GBのファイルサイズをとります。ファイルaprは別のプログラム(Explorer.exeはどこかからコピーしています)によって作成されますが、そのプロセスを完了するのに数分かかります。このイベントは作成時間が長くなり、ファイルのコピー準備が整うのを待つ必要があります。
これは、ファイルが準備完了であるかどうかをチェックする方法です。
public static bool IsFileReady(String sFilename)
{
// If the file can be opened for exclusive access it means that the file
// is no longer locked by another process.
try
{
using (FileStream inputStream = File.Open(sFilename, FileMode.Open, FileAccess.Read, FileShare.None))
{
if (inputStream.Length > 0)
{
return true;
}
else
{
return false;
}
}
}
catch (Exception)
{
return false;
}
}
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow