C 如何直接从磁盘复制锁定的文件并确保文件完整?

C 如何直接从磁盘复制锁定的文件并确保文件完整?,c,file-io,filesystems,ntfs,disk,C,File Io,Filesystems,Ntfs,Disk,我正在编写的应用程序需要能够复制已锁定的文件。我们尝试使用卷影复制,虽然它成功地复制了文件,但在文件上有锁的应用程序崩溃了,因为它在复制文件时无法获得锁 我不得不相信,我唯一的选择就是绕过操作系统,直接从磁盘读取数据。问题是,如果我直接读到磁盘,我不能确定文件的完整性,如果是在写的中间,文件将处于损坏状态。 经过数小时的搜索,我找到了一个实用程序,它直接从磁盘复制文件,并在复制时使用文件系统驱动程序缓存写操作,以确保文件处于完整状态。但是,该实用程序非常昂贵,我可能需要使用10万以上的许可证 有

我正在编写的应用程序需要能够复制已锁定的文件。我们尝试使用卷影复制,虽然它成功地复制了文件,但在文件上有锁的应用程序崩溃了,因为它在复制文件时无法获得锁

我不得不相信,我唯一的选择就是绕过操作系统,直接从磁盘读取数据。问题是,如果我直接读到磁盘,我不能确定文件的完整性,如果是在写的中间,文件将处于损坏状态。 经过数小时的搜索,我找到了一个实用程序,它直接从磁盘复制文件,并在复制时使用文件系统驱动程序缓存写操作,以确保文件处于完整状态。但是,该实用程序非常昂贵,我可能需要使用10万以上的许可证

有没有人对如何完成我的目标有什么想法


我们计划仅将系统限制为NTFS卷。

在执行复制时,能否获取应用程序的进程ID并挂起其线程?类似这样的“分层驱动程序”描述可能有用。不过我对此一无所知


此外,如果文件被锁定,那么您是否可以“监视”它,等待它被解锁,然后快速复制它

我最终使用了一个名为DirectCopy的C程序,该程序由。它相当有效


它真的需要使用NTFS吗?我会尝试在ext4或类似版本的linux上运行wine下的应用程序,只复制文件。是的,我们确实需要在NTFS上运行,我们无法控制硬件。我有点不明白为什么应用程序在使用卷影复制时崩溃。这不应该发生。卷影副本是整个文件系统的只读副本。锁定机制不应受到影响。据我所知,VSS钩子只有在应用程序没有设计为始终处于(崩溃)一致状态的情况下,才能使数据进入一致状态。@UrOni是正确的。您试图做的是卷影复制存在的全部原因。如果它不工作,则可能是您错误解释了错误,或者卷影复制中存在错误。不幸的是,否,应用程序需要继续运行,并且很可能在我们复制文件时从文件中读取和写入。应用程序到底是什么?或者更好的是,为什么需要这样的备份?您可以向目标应用程序中插入一个dll,用于钩住createfile/read/write/close函数并实现所需的缓存,然后在文件备份完成后应用更改。您应该如何确定应用程序何时使文件处于一致状态?这不是问题所在,Eric要求的是10万美元以上软件的替代方案,无需否决,因为我的回答是正确的,但不符合他的要求。需要注意的是,它不会验证文件的完整性,但会直接复制文件,而不会创建文件锁。它能够复制应用程序正在使用的文件,其中VSS副本正在使应用程序崩溃。