我正在使用XP下的StgOpenStorage API来读取OLE化合物文档,但我无法找到正确的标志组合来告诉Windows我只需读取该文件而不会阻塞访问任何其他进程...
现在我正在使用STGM_READ | STGM_EXCLUSIVE
,但显然如果我同时尝试从另一个应用程序打开该文件,它会抱怨被拒绝访问..所以我尝试了STGM_READ | STGM_SHARE_DENY_NONE
但它抱怨无效的旗帜..
有办法做到这一点吗?我走错路了吗?
提前致谢!
(我通过pythoncom从Python调用API,如果它是相关的)
答案 0 :(得分:2)
这是猜测,但是来自StgOpenStorage API文档:
When the STGM_DIRECT flag is specified, only one of the following combination
of flags may be specified from the access and sharing groups.
STGM_READ | STGM_SHARE_DENY_WRITE
STGM_READWRITE | STGM_SHARE_EXCLUSIVE
STGM_READ | STGM_PRIORITY
Be aware that direct mode is implied by the absence of STGM_TRANSACTED.
That is, if neither STGM_DIRECT nor STGM_TRANSACTED is specified, STGM_DIRECT
is assumed.
这表明将标志更改为
STGM_READ | STGM_SHARE_DENY_NONE | STGM_TRANSACTED
应该做你想做的事。这是有道理的:在“直接”模式下,如果有人可以开始写入存储,那么它们将覆盖我们正在阅读的内容。