检查新文件夹是否存在的C#控制台应用程序

时间:2013-01-27 17:43:49

标签: c#

  

可能重复:
  How can I watch a file system directory to see when files are added to it?

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

因此将在c:\ FixedFolderA下创建几个文件夹。

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

我不确定这样做最有效的设计,需要你的帮助。

我在考虑这个工作流程:

  1. 在程序开始时扫描c:\ FixedFolderA。
  2. 将所有子目录存储在列表中。
  3. 创建一个扫描c:\ FixedFolderA的工作进程,并检查列表中是否存在该子目录。如果目录不存在,请执行一些操作。
  4. 我担心的是c:\ FixedFolderA中的子目录会增加超时,程序会每分钟遍历所有这些目录。

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

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

    谢谢。

3 个答案:

答案 0 :(得分:1)

如果您打算观看文件夹进行更改,请使用FileSystemWatcher课程。

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

答案 1 :(得分: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();上面的代码下面包含以下语句。

答案 2 :(得分:0)

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