|
|
1
6
一种相当简单的方法是,将文件系统报告的文件大小、日期(作为整数值)和给定目录中的文件名,并计算 checksum 然后,您可以与该目录关联。您仍然需要使用文件系统数据对所有目录执行此计算,但不必深入(打开文件以检查差异),除非校验和报告了差异。 为了在文件级别跟踪特定的更改,您需要根据各个文件属性存储校验和,当然,还需要根据自上次扫描以来是否存在文件和子目录来存储校验和。 这并不一定保证没有发生更改,因为有文件系统实用程序可以更改所有类型的属性,尽管这是基本扫描的良好第一步。 你可以找到 source code 对于 fswatch 有用的 |
|
|
2
4
如果你是在一个。Net托管语言,请尝试 FileSystemWatcher 班 来自MSDN:
|
|
|
3
4
你有两个问题要处理。 第一个是如果你想观察动态变化(在你的程序运行时)。在这种情况下,您需要使用Windows API ReadDirectoryChangesW。关于如何使用它,网上有很多例子。(注意……有些示例不是很好。此API调用可以并且将为每个调用返回多个事件,您需要仔细阅读接口,了解其工作原理,并处理返回的所有内容。)。 第二个问题是,如果你有一个文件夹或文件夹列表,你想检查它/它们的内容是否发生了变化——通过添加/删除或更改该文件夹中的文件。 在这种情况下,最有效的方法是一次读取一个文件名的文件夹内容,并进行累积哈希。不过,除此之外,您还希望获取属性(使用GetFileAttributesEx之类的工具),并将其包含在哈希中。(确保排除文件夹“”还有“…”-否则,结果将具有误导性。) 这样做的原因是,您希望通过文件的大小、日期等捕捉文件中的更改。不过,您可能不希望包括上次访问的时间。 任何大的散列函数都可以。结果是每个文件夹都有一个大数字(散列)。 然后,在进行另一次传递时,重新计算散列,并与存储的散列比较该文件夹的最后一个已知状态。如果散列不匹配,则需要仔细查看文件夹。 实际上,这种方法(很快)会告诉你,这里有一些东西需要你更详细地了解,你如何做到这一点取决于你试图实现的目标。 这样做的好处是,您不会查看文件夹中每个文件的内容,而是查看一些元数据,这些元数据为您提供了足够的指示。因此,处理速度要快几千倍。 |
|
|
4
3
|
|
|
5
1
FindFirstChangeNotification |
|
|
6
1
在Linux(以及我认为的任何其他类似Unix的操作系统)下,可以为文件/文件夹生成一个哈希值,以表示其在给定时间的状态。稍后,只需重新生成哈希并将其与旧值进行比较。事实证明,这对我正在进行的一些项目非常有效! 详情如下: http://vpalos.com/169/recursive-filedirectory-change-detection/ 它基本上对任何更改都很敏感(即使只是更改文件的访问时间)。 |
|
|
Ernaldo · 如何在C(macOS)中检查文件夹是否真的是别名? 3 年前 |
|
|
Janek · 分布式文件系统,用于指定文件存储在哪台计算机上 13 年前 |
|
|
Andrew · 如何在android中转储文件系统/dev/fuse? 13 年前 |