Метод IRootStorage::SwitchToFile (objidl.h)

Метод SwitchToFile копирует текущий файл, связанный с объектом хранилища, в новый файл. Затем новый файл используется для объекта хранилища и любых незафиксированных изменений.

Синтаксис

HRESULT SwitchToFile(
  LPOLESTR pszFile
);

Параметры

pszFile

Указатель на строку, завершающуюся нулевым значением, которая указывает имя файла для нового файла. Это не может быть имя существующего файла. При значении 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 заставляет элемент освободить свои указатели на хранилище и перейти в режим хранения hands-off. Контейнер также должен освободить все указатели на потоки или хранилища, содержащиеся в этом корневом хранилище. После завершения операции полного сохранения контейнер возвращает содержащиеся элементы в обычный режим хранения.

Примечания для разработчиков

Если вы реализуете собственные объекты хранилища, методы IRootStorage (включая QueryInterface, AddRef и Release) не должны потреблять дополнительную память или дескрипторы файлов.

Требования

Требование Значение
Минимальная версия клиента Windows 2000 Профессиональная [классические приложения | Приложения UWP]
Минимальная версия сервера Windows 2000 Server [классические приложения | Приложения UWP]
Целевая платформа Windows
Header objidl.h
Библиотека Uuid.lib
DLL Ole32.dll

См. также раздел

IPersistStorage::HandsOffStorage

IPersistStorage::SaveCompleted

IStorage::Commit

IStorage::Stat