CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

文件读取问题,咨询

楼主CandCplus()2006-07-03 12:42:35 在 C/C++ / C语言 提问

我用fopen,fread读取一个文件,这个文件长度为15xx字节,但是我读出来只有149x字节,少了50字节左右,是什么原因呢?  
   
  我用的是类似这样的代码  
  file=fopen("x.txt","r");  
  if   (file)  
  {  
          size=fread(temp,1,1549,file);//这里读出来,size返回就只有1494字节  
          ...  
          fclose(file);  
  } 问题点数:50、回复次数:5Top

1 楼Jim_King_2000()回复于 2006-07-03 13:22:09 得分 5

如果是文本文件,为什么不用fgets之类的函数?  
  fread的返回值小于指定值是有可能的,参考msdn:  
  fread   returns   the   number   of   full   items   actually   read,   which   may   be   less   than   count   if   an   error   occurs   or   if   the   end   of   the   file   is   encountered   before   reaching   count.   Use   the   feof   or   ferror   function   to   distinguish   a   read   error   from   an   end-of-file   condition.Top

2 楼UPCC(杂食动物)回复于 2006-07-03 14:01:45 得分 5

size=fread(temp,1549,1,file);你使用这种方式。  
   
  或者你先  
  fssek(file,0,SEEK_END);  
  int   i   =   ftell(file);  
  看看这时的i是多长,  
  还有存在的大小不一定是文件的大小。Top

3 楼jixingzhong(瞌睡虫·星辰)回复于 2006-07-03 14:57:03 得分 30

1           有必要检查你的文件的长度;  
  2           文件打开方式   为文本,但是读取时候是     fread,    
              该方法一般应当使用   b(2进制)方式打开的文件;   //估计这个是主要的原因!  
  3           文件读取的时候     if   (file)   这样的语句可能不是很安全。  
   
  修改:  
  char   ch;  
  file=fopen("x.txt","r");  
  ch   =   fgetc(file);  
  while(ch   !=   EOF)  
  {  
          ...  
          ch   =   fgetc(file);  
  }  
  fclose(file);Top

4 楼zidane_yubo(天涯独尊)回复于 2006-07-03 17:19:01 得分 10

用二进制的方式打开Top

5 楼CandCplus()回复于 2006-07-03 17:58:42 得分 0

我找到了原因,这个文件每行的结束是\r\n,但是读入之后是\n!  
   
  所以若干行读入之后,就少了几个字符,很有意思。打开方式修改成“rb”之后就正确了  
   
   
  ----------------------------  
  3   文件读取的时候   if   (file)   这样的语句可能不是很安全。  
   
  老兄,我还不明白为什么不安全。不过我以后写代码的时候会小心的。Top

相关问题

关键词

得分解答快速导航

  • 帖主:CandCplus
  • Jim_King_2000
  • UPCC
  • jixingzhong
  • zidane_yubo

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo