FileSystemWatcher-创建并重命名C#

FileSystemWatcher-创建并重命名C#,c#,filesystemwatcher,C#,Filesystemwatcher,我目前正在开发一个feeder应用程序,它会查找添加的新文件,并将其名称打印给我。但是当我创建一个新文件时,文件名会立即打印在控制台上。它不会等到我重新命名新创建的文件。我该怎么做 下面是我的设置。我没有使用watcher.rename+=onrename,因为当我重命名文件夹中的任何其他文件时,它正在控制台上打印。但我的要求是只显示新创建文件的列表 watcher = new FileSystemWatcher(folderPath); watcher.IncludeSubdirector

我目前正在开发一个feeder应用程序,它会查找添加的新文件,并将其名称打印给我。但是当我创建一个新文件时,文件名会立即打印在控制台上。它不会等到我重新命名新创建的文件。我该怎么做

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

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

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

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

  • 由于Windows中的文件资源管理器如何处理新文件的创建(例如,通过新建->文本文档快捷方式),您需要注意重命名

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

    创建文件时,请检查其大小。你可以用它来做。如果为零字节,则忽略该事件。否则,将其添加到
    哈希集
    (重复项将自动忽略)

    重命名文件时,检查旧的完整路径和名称,并将其从
    哈希集中删除(如果有);将新的完整路径和名称添加到
    哈希集
    ,而不考虑大小


    这将捕获所有新文件并忽略“新文本文档”样式的对象。

    谢谢CamW:)我认为filewatcher也会处理这种情况。因此,我们尝试在文件夹中创建文件。是的,很不幸,MS决定以这种方式构建windows资源管理器,而不是等到用户重命名文件后才在磁盘上实际创建。嗨,Cam。我还有一个疑问。将一组文档移动到文件夹时遇到问题。例如:当我将大约30个文档插入/移动到运行filewatcher的文件夹中时,打印时它不会显示所有文件名。但当我保持一个断点时,它就起作用了。这有什么问题吗?@ASN,我从来没有遇到过文件系统观察器没有“看到”所做的更改的问题。我需要查看运行应用程序时看到的代码和输出。请创建一个新问题,列出您的代码、仅复制文件时的控制台输出以及使用断点复制时的控制台输出,我来看看。如果你愿意,你可以在这里发布问题的链接。请查看此链接。