IStorage-Compound 파일 구현

IStorage의 복합 파일 구현을 사용하면 복합 파일 개체에 있는 스토리지 개체 내에서 하위 저장소 및 스트림을 만들고 관리할 수 있습니다. 복합 파일 개체를 만들고 IStorage 포인터를 얻으려면 API 함수 StgCreateStorageEx를 호출합니다. 기존 복합 파일 개체를 열고 루트 IStorage 포인터를 얻으려면 StgOpenStorageEx를 호출합니다.

복합 스토리지를 사용하는 애플리케이션은 HKEY_CLASSES_ROOT\SystemFileAssociations 등록해야 하며 자체 속성 처리기를 제공해야 합니다. 자세한 내용은 애플리케이션 등록의 "동사 및 기타 파일 연결 정보 등록" 섹션을 참조하세요.

사용 시기

대부분의 애플리케이션은 이 구현을 사용하여 스토리지 및 스트림을 만들고 관리합니다.

메서드

IStorage::CreateStream

이 스토리지 개체에 포함된 지정된 이름을 사용하여 스트림 개체를 만들고 엽니다. 이름은 길이가 31자를 초과하면 안 됩니다(문자열 종결자를 포함하지 않음). 스트림/스토리지 이름의 첫 번째 문자로 사용되는 000~01f 문자는 OLE에서 사용하도록 예약되어 있습니다. 이는 구조적 스토리지 제한이 아닌 복합 파일 제한입니다. IStorage::CreateStream 메서드의 COM 제공 복합 파일 구현은 다음 동작을 지원하지 않습니다.

  • STGM_DELETEONRELEASE 플래그는 지원되지 않습니다.
  • 스트림 개체에는 트랜잭션 모드(STGM_TRANSACTED)가 지원되지 않습니다.
  • 동일한 스토리지에서 동일한 스트림을 두 번 이상 여는 것은 지원되지 않습니다. STGM_SHARE_EXCLUSIVE 공유 모드 플래그는 grfMode 매개 변수에 지정해야 합니다.

IStorage::OpenStream

grfMode 매개 변수에 지정된 액세스 모드를 사용하여 이 스토리지 개체 내에서 기존 스트림 개체를 엽니다. 스트림/스토리지 이름의 첫 번째 문자로 사용되는 000~01f 문자는 OLE에서 사용하도록 예약되어 있습니다. 이는 구조적 스토리지 제한이 아닌 복합 파일 제한입니다. IStorage::OpenStream 메서드의 COM 제공 복합 파일 구현은 다음 동작을 지원하지 않습니다.

  • STGM_DELETEONRELEASE 플래그입니다.
  • 스트림 개체에 대한 트랜잭션 모드(STGM_TRANSACTED)입니다.
  • 동일한 스토리지에서 동일한 스트림을 두 번 이상 여는 경우 STGM_SHARE_EXCLUSIVE 플래그를 지정해야 합니다.

IStorage::CreateStorage

지정된 액세스 모드에서 지정된 이름의 새 스토리지 개체를 만들고 엽니다. 이름은 길이가 31자를 초과하면 안 됩니다(문자열 종결자를 포함하지 않음). 스트림/스토리지 이름의 첫 번째 문자로 사용되는 000~01f 문자는 OLE에서 사용하도록 예약되어 있습니다. 이는 구조적 스토리지 제한이 아닌 복합 파일 제한입니다. IStorage::CreateStorage 메서드의 COM 제공 복합 파일 구현은 다음 동작을 지원하지 않습니다.

  • 비root 스토리지에 대한 STGM_PRIORITY 플래그입니다.
  • 동일한 부모 스토리지에서 동일한 스토리지 개체를 두 번 이상 여는 경우 STGM_SHARE_EXCLUSIVE 플래그를 지정해야 합니다.
  • STGM_DELETEONRELEASE 플래그입니다. 이 플래그를 지정하면 함수는 STG_E_INVALIDFLAG 반환합니다.

IStorage::OpenStorage

지정된 액세스 모드에서 지정된 이름의 기존 스토리지 개체를 엽니다. 스트림/스토리지 이름의 첫 번째 문자로 사용되는 000~01f 문자는 OLE에서 사용하도록 예약되어 있습니다. 이는 구조적 스토리지 제한이 아닌 복합 파일 제한입니다. IStorage::OpenStorage 메서드의 COM 제공 복합 파일 구현은 다음 동작을 지원하지 않습니다.

  • 비root 스토리지에 대한 STGM_PRIORITY 플래그입니다.
  • 동일한 부모 스토리지에서 동일한 스토리지 개체를 두 번 이상 여는 경우 STGM_SHARE_EXCLUSIVE 플래그를 지정해야 합니다.
  • STGM_DELETEONRELEASE 플래그입니다. 이 플래그를 지정하면 함수는 STG_E_INVALIDFUNCTION 반환합니다.

IStorage::CopyTo

이 열린 스토리지 개체의 하위 저장소 및 스트림만 다른 스토리지 개체에 복사합니다. rgiidExclude 매개 변수는 하위 저장소만 복사하거나 스트림만 복사하도록 IID_IStorage IID_IStream 설정할 수 있습니다.

IStorage::MoveElementTo

하위 저장소 또는 스트림을 이 스토리지 개체에서 다른 스토리지 개체로 복사하거나 이동합니다.

IStorage::Commit

트랜잭션 모드에서 열린 스토리지 개체에 대한 변경 내용이 부모 스토리지에 반영되도록 합니다. 루트 스토리지의 경우 는 실제 디바이스의 변경 내용을 반영합니다. 예를 들어 디스크의 파일입니다. 직접 모드로 열린 루트 스토리지 개체의 경우 이 메서드는 모든 메모리 버퍼를 디스크로 플러시하는 것 외에는 아무런 효과가 없습니다. 직접 모드의 비루트 스토리지 개체의 경우 이 메서드는 영향을 주지 않습니다.

com에서 제공하는 복합 파일 구현은 grfCommitFlags 매개 변수에 STGC_OVERWRITE 지정하지 않는 한 2단계 커밋 프로세스를 사용합니다. 이 2단계 프로세스는 커밋 작업이 실패할 경우 데이터의 견고성을 보장합니다. 먼저 모든 새 데이터가 기본 파일의 사용되지 않는 공간에 기록됩니다. 필요한 경우 새 공간이 파일에 할당됩니다. 이 단계가 완료되면 파일의 테이블이 단일 섹터 쓰기 작업을 사용하여 업데이트되어 새 데이터를 이전 데이터 대신 사용할 것임을 나타냅니다. 이전 데이터는 다음 커밋 작업에서 사용할 여유 공간이 됩니다. 따라서 이전 데이터를 사용할 수 있으며 변경 내용을 커밋할 때 오류가 발생하면 복원할 수 있습니다. STGC_OVERWRITE 지정하면 단일 단계 커밋 작업이 사용됩니다. 트랜잭션 모드 플래그에 대한 자세한 내용은 STGC 열거형을 참조하세요.

IStorage::Revert

마지막 커밋 작업 이후 스토리지 개체에 적용된 모든 변경 내용을 삭제합니다.

IStorage::EnumElements

이 스토리지 개체에 포함된 스토리지 및 스트림 개체를 열거하는 데 사용할 수 있는 열거자 개체에 대한 포인터를 만들고 검색합니다. COM에서 제공하는 복합 파일 구현은 해당 정보의 스냅샷 사용합니다. 따라서 스트림 및 스토리지에 대한 변경 내용은 새 열거자를 가져올 때까지 열거자에 반영되지 않습니다.

IStorage::D estroyElement

이 스토리지 개체에서 지정된 요소(하위 저장소 또는 스트림)를 제거합니다.

IStorage::RenameElement

이 스토리지 개체에서 지정된 하위 저장소 또는 스트림의 이름을 바꿉니다. 스트림/스토리지 이름의 첫 번째 문자로 사용되는 000~01f 문자는 OLE에서 사용하도록 예약되어 있습니다. 이는 구조적 스토리지 제한이 아닌 복합 파일 제한입니다.

IStorage::SetElementTimes

지정된 스토리지 요소의 수정, 액세스 및 생성 시간을 설정합니다. COM에서 제공하는 복합 파일 구현은 내부 스토리지 개체에 대한 수정 및 변경 시간을 유지합니다. 루트 스토리지 개체는 기본 파일 시스템(또는 ILockBytes)에서 지원되는 모든 것을 지원합니다. 복합 파일 구현은 내부 스트림에 대한 타임스탬프를 유지 관리하지 않습니다. 지원되지 않는 타임스탬프는 0으로 보고되므로 호출자가 지원을 테스트할 수 있습니다.

IStorage::SetClass

지정된 CLSID를 이 스토리지 개체에 할당합니다.

IStorage::SetStateBits

이 스토리지 개체에 최대 32비트 상태 정보를 저장합니다. 이 메서드에 의해 설정된 상태는 외부 용도로만 사용됩니다. COM 제공 복합 파일 구현은 상태에 따라 아무 작업도 수행하지 않습니다.

IStorage::Stat

이 열린 스토리지 개체에 대한 STATSTG 구조를 검색합니다.

설명

스토리지 개체가 단순 모드로 열리면 위의 메서드 사용이 제한됩니다. 스토리지는 StgCreateStorageEx 또는 StgOpenStorageEx 함수의 grfMode 매개 변수에 지정된 STGM_SIMPLE 요소로 열려 있는 경우 단순 모드입니다. 단순 모드 스토리지에 대한 자세한 내용은 STGM 상수를 참조하세요. StgCreateStorageEx 함수에서 단순 모드 스토리지 개체를 가져온 경우 CreateStream 메서드를 호출할 수 있지만 OpenStream 메서드는 사용할 수 없습니다. StgOpenStorageEx 함수에서 단순 모드 스토리지 개체를 가져온 경우 OpenStream 메서드를 호출할 수 있지만 CreateStream 메서드는 사용할 수 없습니다.

단순 모드 스토리지 개체를 사용하여 스트림을 만드는 경우 해당 스트림의 최소 크기는 일반적으로 4096바이트입니다. 스트림에 기록되는 데이터가 적으면 크기가 4096바이트까지 반올림됩니다.

복합 파일 구현 제한

IFillLockBytes

ILockBytes

IRootStorage

IStorage

IStream

StgCreateDocfile

StgCreateStorageEx

StgOpenStorage

StgOpenStorageEx