2009-07-06 2 views
1

XP에서 StgOpenStorage API를 사용하여 OLE Compound Document를 읽었지만 Windows에 필요한 플래그를 올바르게 찾을 수 없습니다. 다른 프로세스에 대한 액세스를 차단하지 않고 파일 ...
지금은 STGM_READ | STGM_EXCLUSIVE을 사용하고 있지만 동시에 다른 응용 프로그램에서 파일을 열려고 시도하는 경우 분명히 거부 된 액세스에 대해 불평합니다. STGM_READ | STGM_SHARE_DENY_NONE 으로 표시되지만 잘못된 플래그에 대해 불만을 토로합니다.Open OLE Compound Documents StgOpenStorage로 읽기 전용 문서를 엽니 다.

방법이 있습니까? 내가 잘못 가고있는거야?

미리 감사드립니다. 이것은 추측

답변

2

(가 관련이 있을지, pythoncom를 통해 파이썬에서 API를 호출하고 있습니다)하지만 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 

원하는대로해야합니다. 이것은 '직접'모드에서 누군가가 저장소에 쓰기 시작할 수 있다면 우리가 읽고 있던 것을 덮어 씁니다.

+0

이러한 플래그를 사용하면 StgOpenStorage에 대한 호출이 작동합니다. 많은 감사합니다! :) 다음 단계는 반환 된 인스턴스에서 OpenStream을 호출하는 것입니다.하지만 STG_E_INVALIDFUNCTION에 대해 불평하므로이 시간에는 같은 플래그를 사용할 수 없습니다. STG_READ | STGM_SHARE_EXCLUSIVE 및 작동합니다. 이제 공식 편집기 (CAD)를 사용하여 파일을 열고 오류없이 응용 프로그램과 동시에 열 수 있습니다. ^^; – Joril

+0

나는 그것이 약간의 이해가된다고 생각한다. 그것은 독점적 인 접근으로 스트림을 열어야하는 것처럼 보이지만 일단 '트랜잭션'모드로 스토리지 객체를 열면 저장소 개체의 개인 복사본이므로 배타적 잠금을 설정해도 기본 파일에 대한 액세스가 차단되지 않습니다. (이게 나 한테 와플처럼 들리는데, 나 때문이야!) – DavidK

+0

Ok : D 어쨌든 베타 테스트를 위해 새 버전의 응용 프로그램을 통과 시켰습니다. 다시 한번 감사드립니다 :) 다시 한번 감사드립니다! – Joril