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

时间:2013-01-03 03:47:32

标签: c++ c winapi

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

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

然而,如果我转到命令提示符并执行" c:>更多blah.h"我可以看到该文件。所以"更多"不知何故可以读取文件。知道它是如何实现的吗?

谢谢!

4 个答案:

答案 0 :(得分:4)

  

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

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

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

答案 1 :(得分:1)

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

  

fopen_s和_wfopen_s打开的文件不可共享。如果您需要   一个文件可共享,使用_fsopen,_wfsopen与适当的   共享模式常量(例如,_SH_DENYNO用于读/写)   共享)。

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

fsopen

答案 2 :(得分:0)

请阅读此内容 - http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx 当你说“访问违规”时,你的意思是Win32 0xc000005错误,还是别的什么?

答案 3 :(得分:0)

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