У меня есть код, в котором 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 будет читать или писать. Индекс байта, местоположение файла или что-то в этом роде.
Вы не можете получить позицию от 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();
Других решений пока нет …