2013-05-28 2 views
2

У меня есть код, в котором CArchive используется для чтения и записи и файла. По моему исследованию я узнал, что объект CArchive меняет свое местоположение при чтении данных из разных частей файла. Например, если структура файла похожа на заголовок, то тело, а затем нижний колонтитул. Теперь, если кто-то хочет прочитать нижний колонтитул, CArchive читает нижний колонтитул, только перейдя к определенному местоположению в файле. Это делается с помощью этого.Где CArchive в настоящее время указывает файл

COleStreamFile stream; 
//Stream is pointed to footer location. 
stream.OpenStream(m_pStg, "Footer", nOpenFlags, pError); // pStg is LPSTORAGE 
CArchive ar(&stream, CArchive::load); 

Теперь мне интересно знать, что в каком месте CArchive собирается читать или писать. Байт-указатель, расположение файла или что-то в этом роде.

+0

Вы ищете эквивалентную функцию к тому, что [ftell()] (http://www.cplusplus.com/reference/cstdio/ftell/) делает для потоков файлов? – sashoalm

+0

Да, ftell работает только для FILE или будет работать и для CArchive ?, –

+0

'ftell()' работает только для файловых потоков. – sashoalm

ответ

3

Вы не можете получить позицию непосредственно из объекта CArchive, но вы можете получить его из базового потока - COleStreamFile в вашем случае. Просто позвоните CFile::GetPosition.

Пример:

COleStreamFile stream; 
//Stream is pointed to footer location. 
stream.OpenStream(m_pStg, "Footer", nOpenFlags, pError); // pStg is LPSTORAGE 
CArchive ar(&stream, CArchive::load); 
// Add some data. 
ar << someData; 

// And get the current position. 
int currentPos = stream.GetPosition(); 
+0

один вопрос, если я делаю int poistion1 = stream.GetPosition(); ar << someData; int position2 = stream.GetPosition(); position2 будет отличаться от position1, right ?, –

+0

Я так предполагаю, но у меня нет компьютера с установленной Visual Studio прямо сейчас. Вы лучше протестируете его - добавьте этот код и отлаживайте его, и посмотрите, что произойдет. – sashoalm

+0

Хорошо, позвольте мне попробовать. –

Смежные вопросы