知道如何从另一个进程锁定的文件中读取数据吗?
当我尝试fopen()或CreateFile()或OpenFile()时,我得到共享违规。
然而,如果我转到命令提示符并执行" c:>更多blah.h"我可以看到该文件。所以"更多"不知何故可以读取文件。知道它是如何实现的吗?
谢谢!
答案 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)以提供共享访问权限。
答案 2 :(得分:0)
请阅读此内容 - http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx 当你说“访问违规”时,你的意思是Win32 0xc000005错误,还是别的什么?
答案 3 :(得分:0)
一种方法是将文件复制到新的临时文件并阅读。