2

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

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

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

谢谢!

4

4 回答 4

4

我正在尝试将其打开为“只读”。IE。fopen() 中的“r”和创建文件中的 GENERIC_READ、FILE_SHARE_READ

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

这将解决您的问题。唯一的另一个问题是您将从正在写入的文件中读取。因此文件中的数据完全无法预测地发生变化。

于 2013-01-03T06:20:46.147 回答
1

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

于 2013-01-03T05:43:20.023 回答
1

fopen 已弃用,msdn 建议使用 fopen_s,但未为此启用共享。

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

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

开放式

于 2013-01-03T06:03:53.900 回答
0

请阅读此内容 - http://msdn.microsoft.com/en-us/library/windows/desktop/aa363858(v=vs.85).aspx 当您说“访问冲突”时,您的意思是 Win32 0xc000005 错误吗, 或者是其他东西?

于 2013-01-03T03:54:27.843 回答