Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Метод Commit гарантирует, что все изменения, внесенные в объект хранилища, открытый в режиме транзакций, отражаются в родительском хранилище. Для объектов некорневых хранилищ в режиме прямого подключения этот метод не оказывает никакого влияния. Для корневого хранилища оно отражает изменения в фактическом устройстве; например, файл на диске. Для корневого объекта хранилища, открытого в прямом режиме, всегда вызывайте метод IStorage::Commit до выпуска. IStorage::Commit сбрасывает все буферы памяти на диск для корневого хранилища в прямом режиме и возвращает код ошибки в случае сбоя. Хотя выпуск также сбрасывает буферы памяти на диск, он не может возвращать коды ошибок в случае сбоя. Таким образом, вызов Release без предварительного вызова commit приводит к неопределенным результатам.
Синтаксис
HRESULT Commit(
[in] DWORD grfCommitFlags
);
Параметры
[in] grfCommitFlags
Управляет фиксацией изменений в объекте хранилища. Определение этих значений см. в перечислении STGC .
Возвращаемое значение
Этот метод может возвращать одно из этих значений.
| Код возврата | Описание |
|---|---|
| S_OK | Изменения объекта хранилища успешно зафиксированы на родительском уровне. Если STGC_CONSOLIDATE указано, хранилище было успешно консолидировано или оно уже было слишком компактным для дальнейшей консолидации. |
| STG_S_MULTIPLEOPENS | Операция фиксации выполнена успешно, но не удалось объединить хранилище, так как оно было открыто несколько раз с помощью флага STGM_NOSNAPSHOT. |
| STG_S_CANNOTCONSOLIDATE | Операция фиксации выполнена успешно, но не удалось объединить хранилище из-за неправильного режима хранения. Для составных файлов хранилище может быть открыто с помощью флага STGM_NOSCRATCH или хранилище может быть не самым внешним уровнем транзакций. |
| STG_S_CONSOLIDATIONFAILED | Операция фиксации завершилась успешно, но не удалось объединить хранилище из-за внутренней ошибки (например, сбоя выделения памяти). |
| E_PENDING | Только асинхронное хранилище. Часть или все данные, которые необходимо зафиксировать, в настоящее время недоступны. |
| STG_E_INVALIDFLAG | Недопустимое значение параметра grfCommitFlags . |
| STG_E_INVALIDPARAMETER | Один из параметров был недопустимым. |
| STG_E_NOTCURRENT | Еще один открытый экземпляр объекта хранилища зафиксировал изменения. В результате текущая операция фиксации может перезаписать предыдущие изменения. |
| STG_E_MEDIUMFULL | На устройстве не осталось места для фиксации. |
| STG_E_TOOMANYOPENFILES | Не удалось выполнить операцию фиксации, так как открыто слишком много файлов. |
| STG_E_REVERTED | Объект хранилища был признан недействительным в результате операции отменить изменения над ним в дереве транзакций. |
Комментарии
IStorage::Commit вносит постоянные изменения в объект хранилища, который находится в режиме транзакций, в котором изменения накапливаются в буфере и не отражаются в объекте хранилища до тех пор, пока не будет вызов этого метода. Альтернативой является открытие объекта в режиме прямого подключения, в котором изменения немедленно отражаются в объекте хранилища. Объект, открытый в режиме прямого подключения, не требует вызова IStorage::Commit для внесения постоянных изменений в объект хранилища. Вызов метода IStorage::Commit для нескоротового хранилища, открытого в режиме прямого подключения, не оказывает никакого влияния. Открытие корневого объекта хранилища в режиме прямого доступа гарантирует запись изменений в буферах памяти на базовое устройство хранения.
Операция фиксации публикует текущие изменения в этом объекте хранилища и его дочерних элементах на следующем уровне выше в иерархии хранилища. Чтобы отменить текущие изменения перед их фиксацией, вызовите IStorage::Revert для отката до последней зафиксированной версии.
Вызов IStorage::Commit не влияет на открытые в настоящее время вложенные элементы этого объекта хранилища. Они остаются действительными и могут использоваться. Однако метод IStorage::Commit не фиксирует изменения во вложенных элементах автоматически. Операция фиксации публикует только известные изменения на следующем более высоком уровне в иерархии хранилища. Таким образом, транзакции на вложенных уровнях должны быть зафиксированы в этом объекте хранилища, прежде чем их можно будет зафиксировать на более высоких уровнях.
В операциях фиксации необходимо выполнить действия, чтобы обеспечить защиту данных в процессе фиксации:
- При фиксации изменений в объектах корневого хранилища вызывающий объект должен проверка возвращаемое значение, чтобы определить, успешно ли выполнена операция, и если нет, старое зафиксированное содержимое IStorage по-прежнему нетронуто и может быть восстановлено.
- Если этот объект хранилища был открыт с исключенными элементами, вызывающий объект отвечает за их перезапись перед вызовом фиксации. Для успешной фиксации требуется режим записи в открывшемся хранилище.
- Если не запрещено одновременное использование нескольких модулей записи в одном объекте хранилища, приложение, вызывающее этот метод, должно указать по крайней мере STGC_ONLYIFCURRENT в параметре grfCommitFlags , чтобы изменения, внесенные одним модулем записи, не случайно перезаписали изменения, внесенные другим.
Требования
| Требование | Значение |
|---|---|
| Минимальная версия клиента | Windows 2000 Профессиональная [классические приложения | Приложения UWP] |
| Минимальная версия сервера | Windows 2000 Server [классические приложения | Приложения UWP] |
| Целевая платформа | Windows |
| Header | objidl.h |
| Библиотека | Uuid.lib |
| DLL | Ole32.dll |