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