如何使用fread函数循环读取二进制文件

wazguo 2006-10-12 06:00:08
如何使用fread函数循环读取二进制文件
...全文
1405 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
IMGGTOO 2006-10-13
  • 打赏
  • 举报
回复
我的函数代码是这样的:(采用UNICODE字符集)
BOOL CStr::ReadStrFromFile(LPCTSTR pszFileName, CString &strData)
{
strData.Empty();
if (pszFileName == NULL)
return FALSE;

// 打开文件
FILE* pf = _tfopen(pszFileName, _T("r"));
if (pf == NULL)
return FALSE;

// 文件长度
fseek(pf, 0, SEEK_END);
size_t nDataLen = ftell(pf) / sizeof(TCHAR);
fseek(pf, 0, SEEK_SET);

// 读取数据
LPTSTR pszData = strData.GetBuffer((int)nDataLen + 1);
size_t nRead = fread(pszData, sizeof(TCHAR), nDataLen, pf);
strData.ReleaseBuffer((int)nRead);
fclose(pf);
return TRUE;
}
用他来读取一个TXT文件中的数据时,就会出现问题.调试时可以发现,读取的文件长度nDataLen 是正确的,但是实际读取到的字符书nRead却只是":"之前的 字符数,":"之后的数据读不出来!
但是将冒号改用 英文输入法,就可以了,哪位大哥可以帮着看下!
taodm 2006-10-13
  • 打赏
  • 举报
回复
文件中用汉语输入法输入的冒号不可能会作为文件结束符的。
是你的代码的其它错误导致的。
IMGGTOO 2006-10-12
  • 打赏
  • 举报
回复
借此宝地,小弟提出一个小问题,各位高手可以给点意见:

就是用fread函数读文件时,文件中用汉语输入法输入的冒号(比如说,用智能ABC输入的":",好象被当成了文件结束符或者是其他什么有特殊意义的符号,导致这个冒号和他后面的所有字符都不能被读入.
但是,奇怪的是,用feek函数定位到文件末尾求文件长度的时候,好象可以定位到正常结尾,而不出现把冒号当成结尾的情况!
helanshan 2006-10-12
  • 打赏
  • 举报
回复
FILE*fp;
fp.open("....","rb");
while(!fp.eof())
{
fread(..................);
....
}
Arthur_ 2006-10-12
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/topic/5060/5060715.xml?temp=.3962213

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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