特定のディレクトリに新しい/既存のファイルが見つかった/作成された場合に発生するカスタム イベントが必要です。新しいファイルが作成されたかどうかを確認するには、正常に動作する SystemFileWatcher を使用します。プログラムの開始時にいくつかのファイルが存在するかどうかを確認するために、いくつかの行を書きましたが、それは機能します。
イベント引数にこのクラスを使用します。
public class FileDetectEventArgs : EventArgs
{
public String Source { get; set; }
public String Destination { get; set; }
public String FullName { get; set; }
public FileDetectEventArgs(String source, String destination, String fullName)
{
this.Source = source;
this.Destination = destination;
this.FullName = fullName;
}
}
SystemFileWatcher が FileCreated イベントを発生させる場合、次のコード行を使用します。
public void onFileCreated(object sender, FileSystemEventArgs e)
{
// check if file exist
if (File.Exists(e.FullPath))
{
OnNewFileDetect(new FileDetectEventArgs(source, destination, e.FullPath));
}
}
そして、ファイルが存在する場合、その方法でイベントを発生させようとします:
public void checkExistingFiles(String source, String filter)
{
DirectoryInfo di = new DirectoryInfo(source);
FileInfo[] fileInfos = di.GetFiles();
String fileFilter = filter.Substring(filter.LastIndexOf('.'));
foreach (FileInfo fi in fileInfos)
{
if (fi.Extension.Equals(fileFilter))
{
OnNewFileDetect(new FileDetectEventArgs(source, destination, fi.FullName));
}
}
}
OnNewFileDetect イベントは次のとおりです。
protected void OnNewFileDetect(FileDetectEventArgs e)
{
if (OnNewFileDetectEvent != null)
{
OnNewFileDetectEvent(this, e);
}
}
問題は、onFileCreated-Event が OnNewFileDetect-Event を発生させた場合、すべて正常に動作することです。しかし、checkExistingFiles がいくつかの既存のファイルを見つけ、OnNewFileDetect-Event を発生させようとしても、何も起こりません。OnNewFileDetectEvent-Object が null であるため、何も起こらないことがわかりました。しかし、onFileCreated-Event が発生した場合、なぜ null ではないのでしょうか?