我目前正在开发一个寻线器应用程序,它会查找添加的新文件并将其打印出来。但是当我创建一个新文件时,文件名会立即打印在控制台上。它不会等到我重命名新创建的文件。我怎么能这样做?
以下是我的设置。我没有使用watcher.Renamed+=OnRenamed
,因为当我重命名它在控制台上打印的文件夹中的任何其他文件时。但我的要求只显示新创建的文件列表。
watcher = new FileSystemWatcher(folderPath);
watcher.IncludeSubdirectories = true;
watcher.NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName;
watcher.Filter = "*.*";
watcher.Created += OnCreated;
TIA
答案 0 :(得分:1)
问题是(可能)您正在进入Windows资源管理器,右键单击并选择新的 - >文件类型。当您这样做时,Windows会立即使用默认名称New Text Document.txt
创建文件,并为您提供重命名的机会。此重命名后面与任何其他重命名无法区分,因此您有2个选项。
答案 1 :(得分:0)
由于Windows中的文件浏览器如何处理新文件的创建(例如,通过New-> Text Document快捷方式),您需要注意重命名。
您可以通过HashSet<string>
对象跟踪添加文件的完整路径,并按如下方式更改监控逻辑:
当文件创建时,请检查其大小。您可以使用FileInfo.Length
来执行此操作。如果它是零字节,则忽略该事件。否则,将其添加到HashSet
(将自动忽略重复项)。
当文件重命名时,请检查旧的完整路径和名称,然后将其从HashSet
中移除(如果有的话);无论大小如何,都要将新的完整路径和名称添加到HashSet
。
这应该捕获所有新文件并忽略&#34;新文本文档&#34;风格对象。