win32 C / C ++从“锁定”文件中读取数据

知道如何从另一个进程锁定的文件中读取数据吗?

当我尝试fopen()或CreateFile()或OpenFile()时,我得到共享违规。

然而,如果我进入命令提示符并执行“c:> more blah.h”,我可以看到该文件。 因此,“更多”可以以某种方式读取文件。 知道它是如何实现的吗?

谢谢!

fopen已被弃用,msdn建议使用fopen_s但不启用共享。

fopen_s和_wfopen_s打开的文件不可共享。 如果要求文件可共享,请使用_fsopen,_wfsopen和相应的共享模式常量(例如,_SH_DENYNO用于读/写共享)。

使用_fsopen打开文件并启用共享标志(_SH_DENYNO)以提供共享访问权限。

fsopen

我试图将其打开为“只读”。 即。 fopen()中的“r”和创建文件中的GENERIC_READ,FILE_SHARE_READ

显然,文件没有被锁定,否则更多的命令无法工作。 因此,该过程在创建文件时确实指定了读共享。 错误只是在您自己尝试打开文件时指定FILE_SHARE_READ。 否认写共享。 那个不行,这个过程已经获得了对文件的写访问权,你无法否认它。 相反,您将被拒绝使用共享冲突进行访问。 您还必须指定FILE_SHARE_WRITE才能访问该文件。

这将解决您的问题。 只有其他皱纹是你将从正在写入的文件中读取。 因此,文件中的数据完全不可预测地发生变化。

请阅读本文 – http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx当你说“访问违规”时,你的意思是Win32 0xc000005错误, 或者是其他东西?

一种方法是将文件复制到新的临时文件并读取。