File.Exists()在FileSystemWatcher的Deleted事件中返回false

时间:2014-07-21 08:10:57

标签: c# filesystemwatcher

我陷入了困境。我有一个同步程序,我需要知道观看的项目是文件还是文件夹。问题是当我检查文件或文件夹时 - 无论如何,如果我检查文件,File.Exists总是返回false:

private void onDelete(object o, FileSystemEventArgs e)
{
    if (Directory.Exists(e.FullPath))
        Directory.Delete(watched + e.Name, true);

    if (File.Exists(e.FullPath))
        File.Delete(e.FullPath);
}

任何人都可以看到问题出在哪里?

3 个答案:

答案 0 :(得分:5)

您正试图在onDelete上找到文件/文件夹,当文件/文件夹已被删除时,将触发此方法。因此,您不能在文件夹上获取该文件,因为它已被删除且不存在。

答案 1 :(得分:0)

FileSystemWatcher是一个通知系统,而不是一个钩子。

您不会干预它触发的事件,因此您不必在发生Deleted事件时自行删除文件:在删除已经发生之后,您会收到事件。

答案 2 :(得分:0)

正如阿迪尔在答案中所说,你已经太晚了。但是,也许您可​​以通过文件名本身来区分项目?如果您是唯一一个创建文件和文件夹的人,那么您可以建立一个约定。例如,您可以使用文件扩展名,然后可以从文件名(Path.GetExtension)轻松获取。

除此之外,您可能不得不记录目录中的所有文件和文件夹,以确保它们是您想要的类型。