获得有关硬盘扇区中原始数据更改的通知 - 文件更改通知

时间:2012-10-10 09:21:55

标签: c++ filesystemwatcher inotify

我正在尝试制作一个备份整个硬盘的软件。

我设法编写了一个用于从硬盘扇区读取原始数据的代码。但是,我想要增量备份。为此,我需要知道对操作系统设置,文件更改,所有内容所做的更改。

我的问题是 -

使用FileSystemWatcherInotify,我是否能够了解硬盘中每个扇区所做的每项更改? (操作系统设置等)

我正在使用C ++为linux和windows编写代码。

(在Stackoverflow看到这个问题给了我一些想法)

2 个答案:

答案 0 :(得分:1)

Inotify是在程序运行时检测更改,我猜测FilySystemWatches是相似的。

解决此问题的一种方法是对每个扇区或多个扇区进行校验和,并在进行备份时将校验和与您拥有的列表进行比较,并仅将已更改的备份块进行比较。

答案 1 :(得分:0)

MS Windows FileSystemWatcher机制比Linux's Inotify更受限制,但两者都可能满足您的需求。 Linux机制为文件读取提供(可选)通知,这会导致"访问时间戳"待更新。

但是,从您的应用程序的角度来看,缺点是不会监视从系统启动到程序加载(并卸载到关闭)所做的所有文件修改。您的应用程序可能需要查看许多文件的文件修改时间戳,以识别已更改的文件,具体取决于您所定位的监控级别。

两个体系结构都会在上次访问文件时为每个文件跟踪保留时间戳。如果更新是触发备份通知,则缺少此类通知的Windows机制将导致平台上的行为不匹配。的Windows'由于缓冲区大小限制,机制也可以丢弃通知。这是来自documentation的真正的宝石:

  

请注意,由于与Windows操作系统的依赖关系,当错过事件或超出缓冲区大小时, FileSystemWatcher 不会引发Error事件。为避免遗漏事件,请遵循以下准则:

     
      
  • 使用 InternalBufferSize 属性增加缓冲区大小可以防止丢失文件系统更改事件。

  •   
  • 避免观看文件名较长的文件。考虑使用较短的名称重命名。

  •   
  • 尽可能缩短您的事件处理代码。

  •   

至少你可以控制其中三分之二......