2

可能重复:
如何查看文件系统目录以查看何时将文件添加到其中?

我正在用 c# 创建一个控制台应用程序,它的功能之一是扫描修复文件夹路径(例如 c:\FixedFolderA),每分钟说一次并检查是否已创建新文件夹(例如 c:\FixedFolderA\NewFolderB)。

所以会在 c:\FixedFolderA 下创建几个文件夹。

新文件夹将没有子目录,只有我将复制到其他位置的文件。

我不确定执行此操作的最有效设计,需要您的帮助。

我在考虑这个工作流程:

  1. 在程序开始时扫描 c:\FixedFolderA。
  2. 将所有子目录存储在列表中。
  3. 创建一个扫描 c:\FixedFolderA 的工作进程并检查该子目录是否存在于列表中。如果目录不存在,请执行一些操作。

我担心的是 c:\FixedFolderA 中的子目录数量会增加超时,并且程序每分钟都会遍历所有这些目录。

每分钟检查的例程是否应该通过一个流程来完成?

有人可以用最好的设计分享你的想法让我开始吗?

谢谢 。

4

3 回答 3

1

如果您打算查看文件夹的更改,请使用FileSystemWatcher该类。

此外,如果此控制台应用程序自行执行特定任务,则最好将其转换为Windows 服务

于 2013-01-27T17:50:19.440 回答
1

当事件发生时得到通知几乎总是比定期查询要好。

对于您所描述的上下文,您可以非常轻松地使用FileSystemWatcher该类来指定要通知的文件类型以及要监视的目录。我为您整理了以下代码:

FileSystemWatcher fileWatcher = new FileSystemWatcher("C:\\Users\\ByteBlast\\Desktop", "*.*")
{
    EnableRaisingEvents = true, 
    IncludeSubdirectories = true,
    NotifyFilter =  NotifyFilters.DirectoryName
};

fileWatcher.Created += (sender, eventArgs) => Console.WriteLine("{0} Created", eventArgs.FullPath);

在我指定桌面路径的地方,您将指定例如C:\FixedFolderA.

您可以通过启用该属性来确保您收到有关子目录更改的通知,IncludeSubDirectories就像我在上面所做的那样。

因为您只对文件夹而不是文件感兴趣,所以我将NotifyFilter属性设置为NotifyFilters.DirectroyName.

将上面的代码放在您的控制台应用程序中void Main(),并确保您停止控制台关闭,例如在上面的代码下方包含以下语句Process.GetCurrentProcess().WaitForExit();

于 2013-01-27T18:18:23.800 回答
0

您应该仔细查看File System Watcher ,而不是每分钟扫描目录。这将告诉您何时对目录结构进行了更改-因此它将更加有效。您的程序只需要跟踪所做的更改。

于 2013-01-27T17:49:08.513 回答