IRootStorage::SwitchToFile-Methode (objidl.h)

Die SwitchToFile-Methode kopiert die aktuelle Datei, die dem Speicherobjekt zugeordnet ist, in eine neue Datei. Die neue Datei wird dann für das Speicherobjekt und alle Änderungen ohne Commit verwendet.

Syntax

HRESULT SwitchToFile(
  LPOLESTR pszFile
);

Parameter

pszFile

Ein Zeiger auf eine NULL-beendete Zeichenfolge, die den Dateinamen für die neue Datei angibt. Es darf nicht der Name einer vorhandenen Datei sein. Wenn NULL, erstellt diese Methode eine temporäre Datei mit einem eindeutigen Namen, und Sie können IStorage::Stat aufrufen, um den Namen der temporären Datei abzurufen.

Rückgabewert

Diese Methode kann einen dieser Werte zurückgeben.

Rückgabecode Beschreibung
S_OK Die Datei wurde erfolgreich kopiert.
STG_E_MEDIUMFULL Die Datei wurde aufgrund unzureichenden Speicherplatzes auf dem Speichergerät nicht kopiert.
STG_E_ACCESSDENIED Die Datei wurde nicht kopiert, da der Aufrufer nicht über die Berechtigung für den Zugriff auf das Speichergerät verfügt.
STG_E_INVALIDPOINTER Die Datei wurde nicht kopiert, da der pszFile-Zeiger ungültig ist.
STG_E_FILEALREADYEXISTS Die Datei wurde nicht kopiert, da der neue Dateiname (pszFile) auf eine vorhandene Datei verweist.

Hinweise

Die IRootStorage::SwitchToFile-Methode kopiert die Datei, die dem Speicherobjekt zugeordnet ist. Ein COM-Container ruft SwitchToFile auf, um eine Datei in einer Situation mit wenig Arbeitsspeicher vollständig zu speichern. In der Regel erfolgt dies erst, nachdem ein normaler, vollständiger Speichervorgang (d. h. in einer temporären Datei speichern, Ursprüngliche Datei löschen, temporäre Datei umbenennen) mit einem E_OUTOFMEMORY Fehler fehlgeschlagen ist.

Es ist falsch, die SwitchToFile-Methode aufzurufen, wenn das Speicherobjekt oder etwas, das darin enthalten ist, in einen anderen Prozess gemarshallt wurde. Vor dem Aufrufen von SwitchToFile muss der Container die IPersistStorage::HandsOffStorage-Methode für jedes Element innerhalb des geladenen oder ausgeführten Speicherobjekts aufrufen. Die HandsOffStorage-Methode erzwingt, dass das Element seine Speicherzeiger freigibt und in den speicherbasierten Modus wechselt. Der Container muss auch alle Zeiger auf Streams oder Speicher freigeben, die in diesem Stammspeicher enthalten sind. Nachdem der vollständige Speichervorgang abgeschlossen ist, gibt der Container die enthaltenen Elemente in den normalen Speichermodus zurück.

Hinweise für Implementierer

Wenn Sie Eigene Speicherobjekte implementieren, dürfen die IRootStorage-Methoden (einschließlich QueryInterface, AddRef und Release) keinen zusätzlichen Arbeitsspeicher oder Dateihandles verbrauchen.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [Desktop-Apps | UWP-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [Desktop-Apps | UWP-Apps]
Zielplattform Windows
Kopfzeile objidl.h
Bibliothek Uuid.lib
DLL Ole32.dll

Weitere Informationen

IPersistStorage::HandsOffStorage

IPersistStorage::SaveCompleted

IStorage::Commit

IStorage::Stat