知道如何从被另一个进程锁定的文件中读取数据吗?
当我尝试 fopen() 或 CreateFile() 或 OpenFile() 时,我得到共享冲突。
但是,如果我转到命令提示符并执行“c:> more blah.h”,我可以看到该文件。所以“更多”可以以某种方式读取文件。知道它是如何实现的吗?
谢谢!
我正在尝试将其打开为“只读”。IE。fopen() 中的“r”和创建文件中的 GENERIC_READ、FILE_SHARE_READ
显然文件没有被锁定读取,否则more命令无法工作。因此,该进程在创建文件时确实指定了读取共享。错误只是在您自己尝试打开文件时指定 FILE_SHARE_READ。那否认写共享。那行不通,该进程已经获得了对该文件的写访问权,您不能拒绝它。相反,您将因共享冲突而被拒绝访问。您还必须指定 FILE_SHARE_WRITE 才能访问该文件。
这将解决您的问题。唯一的另一个问题是您将从正在写入的文件中读取。因此文件中的数据完全无法预测地发生变化。
一种方法是将文件复制到一个新的临时文件并读取它。
fopen 已弃用,msdn 建议使用 fopen_s,但未为此启用共享。
fopen_s 和 _wfopen_s 打开的文件不可共享。如果您要求文件可共享,请使用 _fsopen、_wfsopen 和适当的共享模式常量(例如,_SH_DENYNO 用于读/写共享)。
使用 _fsopen 打开文件并启用共享标志 (_SH_DENYNO) 以提供共享访问权限。
请阅读此内容 - http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx 当您说“访问冲突”时,您的意思是 Win32 0xc000005 错误吗, 或者是其他东西?