我使用XP下的StgOpenStorage API来读取OLE复合文档,但我找不到合适的标志组合来告诉Windows我只需要 读 该文件不会阻止任何其他进程访问它。.. STGM_READ | STGM_EXCLUSIVE STGM_READ | STGM_SHARE_DENY_NONE 但它抱怨标志无效。。
STGM_READ | STGM_EXCLUSIVE
STGM_READ | STGM_SHARE_DENY_NONE
有办法做到这一点吗?我走错路了吗?
提前感谢!
(如果相关的话,我将通过pythoncom从Python调用API)
这只是猜测,但根据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_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