Share via


IPersistStorage::Save 메서드(objidl.h)

개체와 개체에 포함된 중첩된 개체를 지정된 스토리지 개체에 저장합니다. 개체가 NoScribble 모드로 전환됩니다.

구문

HRESULT Save(
  [in] IStorage *pStgSave,
  [in] BOOL     fSameAsLoad
);

매개 변수

[in] pStgSave

개체를 저장할 스토리지에 대한 IStorage 포인터입니다.

[in] fSameAsLoad

IPersistStorage::InitNew, IPersistStorage::Load 또는 IPersistStorage::SaveCompleted 호출 중 하나로 개체에 전달된 현재 스토리지인지 여부를 나타냅니다.

이 매개 변수는 다른 이름으로 저장 또는 복사 저장 작업을 수행하거나 전체 저장을 수행할 때 FALSE로 설정됩니다. 후자의 경우 이 메서드는 임시 파일에 저장하고, 원래 파일을 삭제하고, 임시 파일의 이름을 바꿉니다.

이 매개 변수는 메모리 부족 상황에서 전체 저장을 수행하거나 더티 구성 요소만 저장되는 빠른 증분 저장을 수행하기 위해 TRUE로 설정됩니다.

반환 값

이 메서드는 다음 값을 반환할 수 있습니다.

반환 코드 Description
S_OK
메서드가 완료되었습니다.
STG_E_MEDIUMFULL
디스크에 공간이 부족하여 개체가 저장되지 않았습니다.
E_FAIL
디스크 공간 부족 이외의 오류로 인해 개체를 저장할 수 없습니다.

설명

이 메서드는 개체와 개체에 포함된 중첩된 개체를 지정된 스토리지에 저장합니다. 또한 개체를 NoScribble 모드로 배치합니다. 따라서 IPersistStorage::SaveCompleted 메서드에 대한 후속 호출이 개체를 표준 모드로 반환할 때까지 개체는 스토리지에 쓸 수 없습니다.

스토리지 개체가 로드되거나 생성된 개체와 같으면 저장 작업에서 스토리지 개체에 증분 변경 내용을 작성할 수 있습니다. 그렇지 않으면 전체 저장을 수행해야 합니다.

이 메서드는 IPersistStorage::Save 메서드, OleSave 함수 또는 IStorage::CopyTo 메서드를 재귀적으로 호출하여 중첩된 개체를 저장합니다.

이 메서드는 IStorage::Commit 메서드를 호출하지 않습니다. 또한 CLSID를 스토리지 개체에 쓰지 않습니다. 이러한 두 작업은 모두 호출자의 책임입니다.

발신자에 대한 참고 사항

IPersistStorage::Save를 직접 호출하는 대신 일반적으로 다음 단계를 수행하는 OleSave 도우미 함수를 호출합니다.
  1. WriteClassStg 함수를 호출하여 개체의 클래스 식별자를 스토리지에 씁니다.
  2. IPersistStorage::Save 메서드를 호출합니다.
  3. 필요한 경우 스토리지 개체에서 IStorage::Commit 메서드를 호출합니다.
그런 다음 컨테이너 애플리케이션은 저장을 완료하는 데 필요한 다른 작업을 수행하고 각 개체에 대해 SaveCompleted 메서드를 호출합니다.

포함된 개체가 IPersistStorage::Save 메서드를 중첩된 개체에 전달하는 경우 중첩된 개체에 대해 이 메서드를 호출하기 전에 해당 IPersistStorage::SaveCompleted 메서드에 대한 호출을 받아야 합니다.

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 objidl.h

추가 정보

IPersistStorage

OleSave