1

我在 XP 下使用 StgOpenStorage API 读取 OLE 复合文档,但我找不到正确的标志组合来告诉 Windows 我只需要读取文件而不阻止对任何其他进程的访问...
现在我正在使用STGM_READ | STGM_EXCLUSIVE但显然如果我同时尝试从另一个应用程序打开文件,它会抱怨拒绝访问..所以我尝试了STGM_READ | STGM_SHARE_DENY_NONE 但它抱怨无效标志..

有没有办法做到这一点?我走错路了吗?

提前致谢!

(如果相关,我通过 pythoncom 从 Python 调用 API)

4

1 回答 1

2

这是一个猜测,但来自 StgOpenStorage API 文档:

当指定 STGM_DIRECT 标志时,只能从访问和共享组中指定以下标志组合之一

STGM_READ | STGM_SHARE_DENY_WRITE
STGM_READWRITE | STGM_SHARE_EXCLUSIVE
STGM_READ | STGM_PRIORITY

请注意,缺少 STGM_TRANSACTED 暗示了直接模式。也就是说,如果既没有指定 STGM_DIRECT 也没有指定 STGM_TRANSACTED,则假定为 STGM_DIRECT。

这表明将标志更改为

STGM_READ | STGM_SHARE_DENY_NONE | STGM_TRANSACTED

应该做你想做的。这是有道理的:在“直接”模式下,如果有人可以开始写入存储,那么他们将覆盖我们正在阅读的内容。

于 2009-07-07T12:12:44.403 回答