Метод 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