FileSystemWatcher - 创建并重命名C#

时间:2016-05-26 06:48:36

标签: c# filesystemwatcher

我目前正在开发一个寻线器应用程序,它会查找添加的新文件并将其打印出来。但是当我创建一个新文件时,文件名会立即打印在控制台上。它不会等到我重命名新创建的文件。我怎么能这样做?

以下是我的设置。我没有使用watcher.Renamed+=OnRenamed,因为当我重命名它在控制台上打印的文件夹中的任何其他文件时。但我的要求只显示新创建的文件列表。

 watcher = new FileSystemWatcher(folderPath);
 watcher.IncludeSubdirectories = true;
 watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
 watcher.Filter = "*.*";
 watcher.Created += OnCreated;

TIA

2 个答案:

答案 0 :(得分:1)

问题是(可能)您正在进入Windows资源管理器,右键单击并选择新的 - >文件类型。当您这样做时,Windows会立即使用默认名称New Text Document.txt创建文件,并为您提供重命名的机会。此重命名后面与任何其他重命名无法区分,因此您有2个选项。

  1. 停止创建这样的文件,而不是通过打开文本编辑器(或您使用word,excel等任何应用程序)创建文件,在应用程序中创建一个新文件并使用正确的名称保存。这将创建具有您期望名称的文件。
  2. 更改您的代码以迎合文件重命名。

答案 1 :(得分:0)

由于Windows中的文件浏览器如何处理新文件的创建(例如,通过New-> Text Document快捷方式),您需要注意重命名。

您可以通过HashSet<string>对象跟踪添加文件的完整路径,并按如下方式更改监控逻辑:

当文件创建时,请检查其大小。您可以使用FileInfo.Length来执行此操作。如果它是零字节,则忽略该事件。否则,将其添加到HashSet(将自动忽略重复项)。

当文件重命名时,请检查旧的完整路径和名称,然后将其从HashSet中移除(如果有的话);无论大小如何,都要将新的完整路径和名称添加到HashSet

这应该捕获所有新文件并忽略&#34;新文本文档&#34;风格对象。