ifstream 读取文件问题

luxingjyp 2004-12-22 01:59:26
以下是我的一读取文件函数,用的是C++的标准库ifstream,奇怪的是在循环体内读取几次后得到的数据就不对了,如果改成用MFC的CFile类来读取就是正确的,不解


BOOL AddGroup(LPCTSTR lpszGroupName, LPCTSTR lpszFileName)
{
char szBuffer[MAX_PATH];
::ZeroMemory(szBuffer, sizeof(szBuffer));
ifstream File(lpszFileName);
if(File)
{
// 文件标志
File.read(szBuffer, 20);

// 单元数量
int nCellSize = 0;
File.read((char *)&nCellSize, 2);

// 组类型
int nGroupType = 0;
File.read((char *)&nGroupType, 1);

// 读出每单元的数据(出错在此循环体内)
for(int i = 0; i < nCellSize; i++)
{
// 单元名称
::ZeroMemory(szBuffer, sizeof(szBuffer));
File.read(szBuffer, 20);

// 类型数量
DWORD dwTypeSize = 0;
File.read((char *)&dwTypeSize, 4);

// 保存文件指针
streampos InFilePos = File.tellg();

// 移动到下一单元处
File.seekg(dwTypeSize * nGroupType, ios::cur);
}

File.close();
return TRUE;
}

return FALSE;
}
...全文
219 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
luxingjyp 2004-12-23
  • 打赏
  • 举报
回复
不过我又发现一个问题,TRACE()靠不住啊,我的数据本来有471项,可用TRACE()输出时只有388项,哈哈
luxingjyp 2004-12-23
  • 打赏
  • 举报
回复
ukyo1(★★★★★) 谢了,就是没加ios::binary
  • 打赏
  • 举报
回复
你的文件是二进制格式吧?打开时要这样写:
ifstream File(lpszFileName,ios::in|ios::binary);
没有你的数据文件,我没法测试,不知是否正确。
API里可以用SetFilePointer(Ex)找回当前文件指针,
其实用fopen,fread,fwrite相当不错,我一直在用,从来没出过问题。
luxingjyp 2004-12-22
  • 打赏
  • 举报
回复
为何啊
luxingjyp 2004-12-22
  • 打赏
  • 举报
回复
在移动文件指针啊
跟踪了发现是
// 单元名称
::ZeroMemory(szBuffer, sizeof(szBuffer));
File.read(szBuffer, 20);//这里出错,读出的数据根本就是乱码
cnwww 2004-12-22
  • 打赏
  • 举报
回复
好像写错了!只有耐心找原因了.
cnwww 2004-12-22
  • 打赏
  • 举报
回复
File.seekg(dwTypeSize * nGroupType, ios::cur);这一句在做什么?
liudaqin 2004-12-22
  • 打赏
  • 举报
回复
没有用过,我只用过 ifstream>> 和 ofstream<<
luxingjyp 2004-12-22
  • 打赏
  • 举报
回复
晕了,试了N多种方法,连_lopen(),_lread()这一套都用上了,也正确,就是ifstream出错
顺便问问,有没有HFILE的相关函数可获取当前文件指针,总不能加一个计数器吧
luxingjyp 2004-12-22
  • 打赏
  • 举报
回复
我需要保存此时的文件指针,在程序里streampos InFilePos是定义在类里的
晕了,我改成用API的来操作也是正确的
hony688 2004-12-22
  • 打赏
  • 举报
回复
gz
fangrk 2004-12-22
  • 打赏
  • 举报
回复
streampos InFilePos = File.tellg();

对你的程序有什么作用?
luxingjyp 2004-12-22
  • 打赏
  • 举报
回复
怎么没人看啊,难道非逼我用API了

16,548

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • AIGC Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧