Аналогичны транзакциям в базе данных. Очень кстати хорошее дело. Применительно для файлов. Для того, чтобы вы могли использовать транзакции при открытии хранилища необходимо использовать флаг STGM_TRANSACTED. Если Вы сделали так, то у вас появляется возможность подтверждать изменения или отменять их.
Commit-подтверждение транзакции:
HRESULT Commit ( DWORD grfCommitFlags //флаг подтверждения изменений );
Revert - отказ от изменений:
HRESULT Revert(void);
И в той и в другой функции результат S_OK скажет, что все в порядке.
Смотрите в данном примере файл не создастся. В самый последний момент мы передумаем:
#include "stdafx.h" #include "windows.h" #include "ole2.h" #include "iostream.h" int main(int argc, char* argv[]) { OLECHAR filename[20]; wcscpy(filename,L"test.stg"); LPSTORAGE pIStorage=NULL; HRESULT rez; rez=StgOpenStorage(filename,NULL, STGM_READWRITE | STGM_SHARE_EXCLUSIVE | STGM_TRANSACTED ,NULL,0,&pIStorage); if (!FAILED(rez)) { LPSTREAM stream = NULL; HRESULT hresult = pIStorage->CreateStream(L"MyFileNew", STGM_READWRITE|STGM_SHARE_EXCLUSIVE|STGM_CREATE,0, 0, &stream); pIStorage->Revert(); stream->Release(); pIStorage->Release(); } else cout << "Error open" << endl; return 0; }