可能重复:
How can I watch a file system directory to see when files are added to it?
我在c#中创建一个控制台应用程序,其中一个功能是扫描修复文件夹路径(例如c:\ FixedFolderA)说每分钟并检查是否已创建新文件夹(示例c:\ FixedFolderA \ NewFolderB )。
因此将在c:\ FixedFolderA下创建几个文件夹。
新文件夹没有子目录,只有我将复制到其他位置的文件。
我不确定这样做最有效的设计,需要你的帮助。
我在考虑这个工作流程:
我担心的是c:\ FixedFolderA中的子目录会增加超时,程序会每分钟遍历所有这些目录。
每一分钟的例程是否应该通过流程完成?
有人可以用最好的设计分享你的想法,让我开始吗?
谢谢。
答案 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,而不是每分钟扫描一次目录。这将告诉您何时对目录结构进行了更改 - 因此它将更有效率。您的程序只需跟踪已进行的更改。