用fread读取文件,怎么把回车换行符 0x0D 0x0A 只读成了 0x0A了???

yk84 2004-07-08 04:44:26
//得到文件大小
fseek( fileinfo, 0, SEEK_END );
fpos_t pos;
fgetpos(fileinfo, &pos);
fseek( fileinfo, 0, SEEK_SET );


//读取文件
char *FileData = new char[pos];
fread ( FileData, pos , 1, fileinfo );
FileData[pos] = '\0';
fclose( fileinfo );

却发现读出来filedata中后面跟上几个奇怪的字符.仔细检查才发现fread没有把0x0D给读进去啊??


那我要怎么把这个文件中的内容完整的读到一个buffer中去呢?
...全文
776 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
ccitt 2004-07-08
  • 打赏
  • 举报
回复 1
以二进制方式打开文件
fp = fopen("cc.txt", "rb");

yk84 2004-07-08
  • 打赏
  • 举报
回复
可问题还没解决哪!

To: chenggang77

能说说到底怎么回事吗???
yk84 2004-07-08
  • 打赏
  • 举报
回复
噢.是我错了.
yk84 2004-07-08
  • 打赏
  • 举报
回复
不会吧?

char *a = new char[0];

然后我访问 a[0],没有任何问题.
但当我访问 a[1]时,辅助工具就提示内存泄漏了.
快乐鹦鹉 2004-07-08
  • 打赏
  • 举报
回复
错。是pos。
数组下标从0到pos-1,pos就越界了。
yk84 2004-07-08
  • 打赏
  • 举报
回复
char *FileData = new char[pos];

实际上FileData的长度应该是pos+1吧??
快乐鹦鹉 2004-07-08
  • 打赏
  • 举报
回复
char *FileData = new char[pos];
fread ( FileData, pos , 1, fileinfo );
FileData[pos] = '\0';
pos既然是数组长度,那FileData[pos]就是一个溢出的地址拉!
yk84 2004-07-08
  • 打赏
  • 举报
回复
我的文件确实有0x0D啊.我确实拿十六进制文本编辑器看了好几遍.


怎么设置二进制/文本方式?
chenggang77 2004-07-08
  • 打赏
  • 举报
回复
肯定是二进制/文本方式搞错了
3jaja 2004-07-08
  • 打赏
  • 举报
回复
楼主已经把这个文件中的内容完整的读到一个buffer中去了。
我估计你的文件没有0x0d.用16进制文件打开看看。
yk84 2004-07-08
  • 打赏
  • 举报
回复
我用fseek直接移到文件末尾再得到它的pos,得出的是文件大小啊.我在WINDOWS下看了这个文件,得出的pos值确实没错.但为什么读出来却有错?
yk84 2004-07-08
  • 打赏
  • 举报
回复
pos是文件大小.数组下标从0开始,FileData[pos]应该不会把最后一个字符冲掉的啊.
bohut 2004-07-08
  • 打赏
  • 举报
回复
同意鹦鹉的,在我给出的代码里,读到的文件大小是n-1,而new出的长度是n,也就是这个道理
快乐鹦鹉 2004-07-08
  • 打赏
  • 举报
回复
应该 new char[pos+1],不然FileData[pos] = '\0';就把最后一个字符冲掉了。最后一个是不是0x0d啊
bohut 2004-07-08
  • 打赏
  • 举报
回复
FILE *fp;
fp = fopen("c:\\123","r")
int n = 0;
while(!feof(fp))//读文件大小(n-1是文件的大小)
{
fgetc(fp);
n++;
}
rewind(fp);
char *pBuf = new char[n];
fread(pBuf,1,n,fp);
fclose(fp);

16,548

社区成员

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

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

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