다음을 통해 공유


IPropertyStorage::Commit 메서드(propidlbase.h)

IPropertyStorage::Commit 메서드는 속성 스토리지 개체의 변경 내용을 부모 스토리지 개체에 저장합니다.

구문

HRESULT Commit(
  [in] DWORD grfCommitFlags
);

매개 변수

[in] grfCommitFlags

커밋을 수행할 조건을 지정하는 플래그입니다. 특정 플래그 및 해당 의미에 대한 자세한 내용은 설명 섹션을 참조하세요.

반환 값

이 메서드는 E_UNEXPECTED 표준 반환 값과 다음을 지원합니다.

설명

IStorage::Commit과 마찬가지로 IPropertyStorage::Commit 메서드는 속성 스토리지 개체에 대한 변경 내용이 부모 스토리지에 반영되도록 합니다.

복합 파일 구현의 직접 모드에서 이 메서드를 호출하면 현재 메모리 버퍼의 변경 내용이 기본 속성 스트림으로 플러시됩니다. 비심플 속성 집합에 대한 복합 파일 구현에서 IStorage::Commit 은 전달된 grfCommitFlags 매개 변수를 사용하여 기본 하위 저장소 개체에서도 호출됩니다.

트랜잭션 모드에서 이 메서드를 사용하면 변경 내용이 스토리지 개체의 영구 이미지에 영구적으로 반영됩니다. 커밋된 변경 내용은 이 속성 집합이 열린 이후 또는 속성 집합의 이 열기에 대한 마지막 커밋 이후 이 속성 집합에 적용되어야 합니다. commit 메서드는 한 개체 수준에서 변경한 내용을 다음 수준에 게시합니다. 물론 이 속성 집합이 포함된 개체에 있을 수 있는 모든 외부 수준 트랜잭션의 적용을 받습니다. 커밋 작업이 성공하려면 속성 집합 열기에서 속성 집합을 열 때( IPropertySetStorage를 통해) 쓰기 권한을 지정해야 합니다.

어떤 이유로든 커밋 작업이 실패하면 속성 스토리지 개체의 상태는 커밋 이전의 상태로 유지됩니다.

이 호출은 이 속성 스토리지에서 열린 기존 스토리지 또는 스트림 반환 속성에 영향을 주지 않지만 커밋합니다.

grfCommitFlags 매개 변수에 대한 유효한 값은 다음 표에 나와 있습니다.

의미
STGC_DEFAULT 일반적인 트랜잭션 의미 체계에 따라 커밋합니다. 마지막 작가가 승리합니다. 이 플래그는 다른 플래그 값으로 지정할 수 없습니다.
STGC_ONLYIFCURRENT 속성 집합의 현재 영구 콘텐츠가 커밋할 변경 내용의 기반이 되는 경우에만 변경 내용을 커밋합니다. 즉, 속성 집합의 내용이 속성 집합의 다른 열기에서 커밋에 의해 변경된 경우 변경 내용을 커밋하지 않습니다. 이러한 이유로 커밋이 성공하지 못하면 오류 STG_E_NOTCURRENT 반환됩니다.
STGC_OVERWRITE 트랜잭션의 외부 중첩 수준이 더 이상 없는 트랜잭션을 커밋할 때만 유용하지만 모든 경우에 허용됩니다.
참고 호출자가 대상 볼륨의 디스크 사용량을 줄이면 일부 데이터 손상을 감수할 의향이 있음을 나타냅니다. 이 플래그는 디스크 공간 부족 시나리오에서 유용할 수 있지만 주의해서 사용해야 합니다.
 
 
참고IPropertyStorage::Commit 을 사용하여 Windows XP의 이미지 파일에 속성을 쓰는 것은 작동하지 않습니다. 영향을 받는 이미지 파일 형식은 다음과 같습니다.
  • .bmp
  • .dib
  • .emf
  • .gif
  • .ico
  • .jfif
  • .jpe
  • .jpeg
  • .jpg
  • .png
  • .Rle
  • .tiff
  • .wmf
Windows XP의 이미지 파일 속성 처리기의 버그로 인해 IPropertyStorage::Commit 을 호출하면 실제로 변경 내용을 유지하지 않고 삭제됩니다.

해결 방법은 다음과 입니다.

IPropertyStorage::Commit에 대한 호출을 생략합니다. IPropertyStorage::Commit을 호출하지 않고 XP 이미지 파일 속성 처리기에서 IUnknown::Release를 호출하면 먼저 변경 내용이 파일에 암시적으로 커밋됩니다. 일반적으로 IPropertyStorage ::Commit을 먼저 호출하지 않고 IUnknown::Release를 호출하면 변경된 내용이 삭제됩니다. 이 해결 방법은 Windows XP의 이미지 파일 속성 처리기에만 적용됩니다. 또한 이후 버전의 Windows에서는 이 구성 요소가 제대로 작동합니다(즉, IPropertyStorage::Commit 을 호출하면 변경 내용이 유지되고 IPropertyStorage ::Commit을 호출하지 않고 IUnknown::Release를 호출하면 삭제됩니다).

 

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional [데스크톱 앱 | UWP 앱]
지원되는 최소 서버 Windows 2000 Server [데스크톱 앱 | UWP 앱]
대상 플랫폼 Windows
헤더 propidlbase.h(Objbase.h, Propidlbase.h 포함)
라이브러리 Uuid.lib
DLL Ole32.dll

추가 정보

IPropertyStorage

IPropertyStorage::ReadMultiple

IStorage::Commit