IRootStorage::SwitchToFile メソッド (objidl.h)

SwitchToFile メソッドは、ストレージ オブジェクトに関連付けられている現在のファイルを新しいファイルにコピーします。 その後、ストレージ オブジェクトとコミットされていない変更に新しいファイルが使用されます。

構文

HRESULT SwitchToFile(
  LPOLESTR pszFile
);

パラメーター

pszFile

新しいファイルのファイル名を指定する null で終わる文字列へのポインター。 既存のファイルの名前にすることはできません。 NULL の場合、このメソッドは一意の名前を持つ一時ファイルを作成し、IStorage::Stat を呼び出して一時ファイルの名前を取得できます。

戻り値

このメソッドは、これらの値のいずれかを返すことができます。

リターン コード 説明
S_OK ファイルが正常にコピーされました。
STG_E_MEDIUMFULL ストレージ デバイスの領域が不足しているため、ファイルがコピーされませんでした。
STG_E_ACCESSDENIED 呼び出し元にストレージ デバイスへのアクセス許可がないため、ファイルはコピーされませんでした。
STG_E_INVALIDPOINTER pszFile ポインターが無効であるため、ファイルがコピーされませんでした。
STG_E_FILEALREADYEXISTS 新しいファイル名 (pszFile) が既存のファイルを指しているため、ファイルはコピーされませんでした。

注釈

IRootStorage::SwitchToFile メソッドは、ストレージ オブジェクトに関連付けられているファイルをコピーします。 COM コンテナーは SwitchToFile を呼び出して、メモリ不足の状況でファイルに対して完全保存を実行します。 通常、これは通常の完全保存操作 (つまり、一時ファイルへの保存、元のファイルの削除、一時ファイルの名前変更) が失敗し、E_OUTOFMEMORY エラーが発生した後にのみ行われます。

ストレージ オブジェクトまたはその中に含まれるものが別のプロセスにマーシャリングされている場合、 SwitchToFile メソッドを呼び出すと誤って発生します。 SwitchToFile を呼び出す前に、コンテナーは、読み込まれるか実行中のストレージ オブジェクト内の任意の要素に対して IPersistStorage::HandsOffStorage メソッドを呼び出す必要があります。 HandsOffStorage メソッドは、要素が強制的にストレージ ポインターを解放し、ハンズオフ ストレージ モードに入ります。 コンテナーは、このルート ストレージに含まれているストリームまたはストレージへのすべてのポインターも解放する必要があります。 完全な保存操作が完了すると、コンテナーは含まれている要素を通常のストレージ モードに戻します。

実装者へのメモ

独自のストレージ オブジェクトを実装する場合、 IRootStorage メソッド ( QueryInterfaceAddRefRelease を含む) では、追加のメモリまたはファイル ハンドルを使用することはできません。

要件

要件
サポートされている最小のクライアント Windows 2000 Professional [デスクトップ アプリ |UWP アプリ]
サポートされている最小のサーバー Windows 2000 Server [デスクトップ アプリ |UWP アプリ]
対象プラットフォーム Windows
ヘッダー objidl.h
Library Uuid.lib
[DLL] Ole32.dll

こちらもご覧ください

IPersistStorage::HandsOffStorage

IPersistStorage::SaveCompleted

IStorage::Commit

IStorage::Stat