获得有关硬盘扇区中原始数据更改的通知-文件更改通知
Get notified about the change in raw data in hard disk sector - File change notification
我正在尝试制作一个备份整个硬盘的软件。
我已经设法编写了一个从硬盘扇区读取原始数据的代码。但是,我想要增量备份。为此,我需要知道对操作系统设置、文件更改等的更改。
我的问题是
使用FileSystemWatcher和Inotify,我能知道硬盘驱动器中每个扇区的每一次更改吗?(操作系统设置等)
我正在用C++为linux和windows编写代码。
(在Stackoverflow上看到这个问题,这给了我一些想法)
Inotify是在程序运行时检测更改,我猜FilySystemWatches也类似。
解决此问题的一种方法是在每个扇区或多个扇区上设置校验和,并且在进行备份时,将校验和与已更改的列表以及仅更改的备份块进行比较。
MS Windows FileSystemWatcher机制比Linux的Inotify更受限制,但两者都可能满足您的需要。Linux机制为文件读取提供(可选)通知,从而更新"访问时间戳"。
然而,从应用程序的角度来看,缺点是从系统启动到程序加载(以及卸载到关闭)所做的所有文件修改都不会受到监控。您的应用程序可能需要查看许多文件的文件修改时间戳,以识别已更改的文件,具体取决于您的监控级别。
这两种体系结构都为每个文件保留一个时间戳,用于跟踪文件上次访问的时间。如果正在更新的是备份通知的触发器,则缺少此类通知的Windows机制将导致平台上的不匹配行为。由于缓冲区大小的限制,Windows的机制也可以删除通知。以下是文档中的一块真正的宝石:
请注意,FileSystemWatcher在由于与Windows操作系统的依赖关系而错过事件或超过缓冲区大小时不会引发Error事件。为了避免遗漏事件,请遵循以下指南:
使用InternalBufferSize属性增加缓冲区大小可以防止丢失文件系统更改事件。
避免观看文件名较长的文件。请考虑使用较短的名称进行重命名。
使事件处理代码尽可能短。
至少你可以控制其中三分之二。。。。
- .cpp和.h文件中的模板专用化声明
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 文本文件中的单词链表
- CMake-按正确顺序将项目与C运行时对象文件链接
- Windows Portable设备 - 创建 /复制 /删除新文件时通知
- 安卓文件系统挂载/卸载通知
- 通知文件描述符准备使用回调读取
- 通过文本文件逐字通知并替换某些单词
- 获得有关硬盘扇区中原始数据更改的通知-文件更改通知
- inotify 多次错误地通知新文件
- inotify:如何在传输完成后通知目录中的新文件
- IE浏览器IFolderview2创建文件夹发布通知
- 在 Windows 中修改文件夹时通知我的应用程序
- C++获取导致目录更改通知的文件的文件名
- 如何通知调试器运行时链接的 DLL 文件的位置
- 文件关闭通知
- 如何在写入发生之前获得文件更改的通知?
- 在写文件时磁盘已满.我怎么能得到通知呢?
- Visual Studio 在从 GIT 存储库拉取文件时不会通知我文件更改(使用 samba)
- 如何通知其他进程文件已标记为删除