c++ - CArchive 当前在文件中的位置

标签 c++ file mfc 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 将在哪个位置读取或写入。字节索引、文件位置或类似的东西。

最佳答案

您无法直接从 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();

关于c++ - CArchive 当前在文件中的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16790732/

相关文章:

java - JNI 不满意链接错误 : A dynamic link library (DLL) initialization routine failed

javascript - 使用javascript读取本地文件

php - fwrite() 期望参数 1 是资源,c 中给出的字符串 ://

c++ - 用 C/C++ 编写日志文件

c# - 2个计时器,一个落后另一个n秒

c++ - 尝试将小部件添加到 QTabWidget 时出错

c++ - 最简单的template-template为什么编译不出来?

c++ - 正则表达式只匹配一些文件名

c# - 当在后台线程上创建的 Dispatcher 没有关闭时会发生什么?如何确保调度程序正确关闭?

visual-c++ - CMenu 和基于对话框的应用程序