Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 目录监视_C#_File_Directory - Fatal编程技术网

C# 目录监视

C# 目录监视,c#,file,directory,C#,File,Directory,检查添加到目录中的新文件的最佳方法是什么?我认为filesystemwatcher不适合,因为这不是一个始终在线的服务,而是一个在程序启动时运行的方法 我正在监视的文件夹结构中有20000多个文件,目前我正在逐个检查每个文件,以查看文件路径是否在我的数据库表中,但是这需要大约10分钟的时间,我希望能够加快速度 我可以存储文件夹上次检查的日期-使用createddate>last checked date轻松获取所有文件 有人有什么想法吗 谢谢 马克你能写一个在那台机器上运行的服务吗?然后,该服务

检查添加到目录中的新文件的最佳方法是什么?我认为filesystemwatcher不适合,因为这不是一个始终在线的服务,而是一个在程序启动时运行的方法

我正在监视的文件夹结构中有20000多个文件,目前我正在逐个检查每个文件,以查看文件路径是否在我的数据库表中,但是这需要大约10分钟的时间,我希望能够加快速度

我可以存储文件夹上次检查的日期-使用createddate>last checked date轻松获取所有文件

有人有什么想法吗

谢谢


马克

你能写一个在那台机器上运行的服务吗?然后,该服务可以使用FileSystemWtcher

您的方法是唯一可行的(即,文件系统监视程序允许您查看更改,而不是在启动时检查)

看看是什么花了这么长时间。20.000张支票不应花费10分钟-最多1张。你的程序写得很慢。你如何测试它


提示:不要询问数据库,获取内存中所有文件的列表,数据库中所有文件的列表,签入内存。数据库中的20.000条SQL语句太慢,这样您就需要一条语句来获取列表。

FileSystemWatcher
就是这样,所以即使您可以使用服务,它也不一定适合您

我可以看到的两个选项是:

  • 保留一个你知道的文件列表,并与此列表进行比较。这将允许您查看文件是否已添加、删除等。将此列表保留在内存中,而不是查询每个文件的数据库
  • 按照您的建议,存储一个时间戳并与之进行比较

  • 10分钟对于20000个文件来说似乎太长了。你打算怎么做比较?你的建议也不能解释删除的文件。如果要从数据库中删除这些内容,则必须进行完整比较


    也许问题在于数据库往返。您可以从数据库中以大块(或一次全部)的形式检索已知的文件列表,并按字母顺序排序。同时对本地文件列表进行排序,并遍历这两个列表,同时处理丢失的或新的条目。

    拥有Kevin Jones建议的FileSystemWatcher服务可能是最实用的答案,但还有一些其他选择

    如果使用Samba在linux设备上装载目录,则可以使用inotify查看该目录。当然,这假设您不介意分割您的平台,但这就是inotify的用途


    更准确地说,如果您正在监视一个包含20K文件的目录,那么可能是时候改进您的系统架构了,但这样做的可能性相对较小。由于不太了解您的应用程序,它听起来像是一个值得一看的消息队列。

    您可以在某个地方写入上次创建onfile的时间戳,它很简单,可以为您工作。

    这是一个有趣的问题。我知道没有一种方法可以在没有内存驻留程序注册这些事件的情况下跟踪对目录的更改。(顺便说一句,这些观察者也有其局限性)。您可能需要重新扫描目录树(启动时、定期、随时),唯一的问题是如何尽可能快速高效地进行扫描。时间戳方法应该非常有效,但前提是您不必检查已删除的文件。这不是问题的一部分,但你也有兴趣知道这一点是有道理的。也许,你可以不那么频繁地检查删除的文件,或者在后台或其他地方。为tomtom的提示干杯,我的程序调用每个文件的数据库,你是对的,当然是我可以重构的一个领域。关于往返问题,你是对的,我不需要担心删除的文件,因为我每次尝试加载文件时都会检查这些文件cheers@foz1284:在这种情况下,可以选择使用时间戳。它们在技术上不是100%可靠的,因为有人可以更改文件上的时间戳。不过,这对你来说可能不是问题。谢谢,我考虑过了,但不喜欢提供服务的想法,只是个人喜好,这仍然不能保证你不会错过任何变化。另外,一般来说,让服务只为偶尔运行的应用程序运行是糟糕的设计。当然,在这种情况下,这可能是可以接受的;这取决于应用程序的类型。它是一个图片管理类型的应用程序,所以结构只是“我的图片”文件夹,正如thorrarin所说,为这个程序运行一个可能只是偶尔运行的服务似乎有些过分了