FileSystemWatcher - 创建和重命名 C#

FileSystemWatcher - Create and Rename C#

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

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

 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 个选项。

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

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

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

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

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

这应该捕获所有新文件并忽略 "New Text Document" 样式对象。