Шаг 65 - Исследование хранилища на примере WORD EXCEL

Итак, у нас есть хранилище. Мы умеем его создавать и открывать. Только наше хранилище пока пустое. Я еще упоминал, что многое программное обеспечение Microsoft хранит данные именно так. То есть организует хранилище куда и помещает свои данные. Не знаю как все программное обеспечение, но WORD точно. Итак, пока не вдаваясь в подробности. Открыв хранилище и получив к нему интерфейс мы можем получить интерфейс к перечислителям EnumElements, а у этого перечислителя есть метод Next. С помощью него можно перебирать содержимое хранилища. Если это понятно, то вот код. Не вдавайтесь в детали пока. Главное просто посмотреть сейчас как это работает. Я создал документ WORD и поместил в него текст и графику. Вы можете использовать любой. Вот пример.

#include "stdafx.h"
#include "windows.h"
#include "ole2.h"
#include "iostream.h"


int main(int argc, char* argv[])
{
	OLECHAR filename[20];
	wcscpy(filename,L"1.xls");
	LPSTORAGE pIStorage=NULL;
	HRESULT rez;
	rez=StgOpenStorage(filename,NULL, STGM_READ |
		STGM_SHARE_EXCLUSIVE,NULL,0,&pIStorage);
	if (!FAILED(rez))
	{
		cout << "Ok open" << endl;
		LPENUMSTATSTG lpEnum=NULL;
		pIStorage->EnumElements(0,NULL,0,&lpEnum); 
		if (lpEnum!=NULL)
		{
			cout << "Ok enum" << endl;
			ULONG uCount;
			STATSTG stat;
			while (lpEnum->Next(1,&stat,&uCount)==S_OK)
			{
			cout << (LPSTR)stat.pwcsName << endl;
			}
			lpEnum->Release(); 
		}
		else cout << "Error enum" << endl;
		pIStorage->Release();
	}
	else cout << "Error open" << endl;
	return 0;
}

Результат его работы такой.

Ok open
Ok enum
D
1
M

O
W
Press any key to continue

Ну очень впечатляет. Самое главное, что это хранилище. Открылось и сработало. Если хотите видеть нормальные надписи, то смотрите "Шаг 57 - OLECHAR в CHAR и обратно", о том как конвертировать символы. То же самое будет работать для Excel. Попробуйте.

65_1.gif (2114 b)

65_2.gif (1739 b)

65_3.gif (1946 b)

Обратите внимание на сигнатуру файлов. Они все начинаются с РП. Вот такие файлы и есть хранилища и с ними можно работать указанными методами.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 2.03.2001