C++ C++ C# C# ASP.NET Security ASP.NET Security ASM ASM Скачать Скачать Поиск Поиск Хостинг Хостинг  
  Программа для работы с LPT портом...
Язык: .NET — ©Alexey...
  "ASP.NET Atlas" – AJAX в исполнении Micro...
Язык: .NET — ©legigor@mail.ru...
  "Невытесняющая" Многопоточность...
Язык: C/C++ — ©...
  Update World C++: Сборник GPL QT исходников
  Весь сайт целиком можно загрузить по ссылкам из раздела Скачать
Нетология

 76 - Транзакции в хранилищах / ActiveX по шагам / Приложение

Шаг 76 - Транзакции в хранилищах

Аналогичны транзакциям в базе данных. Очень кстати хорошее дело. Применительно для файлов. Для того, чтобы вы могли использовать транзакции при открытии хранилища необходимо использовать флаг 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;
}

| |
Автор Каев Артем.
[AD]





Letyshops [lifetime]