社区
C++ Builder
帖子详情
关于文件的读取的一个问题
netying
2003-03-18 01:52:06
FILE *fp;
unsigned char c;
AnsiString hexstr="";
fp=fopen("d:\\documents\\ttt.txt","rb");
while(!(feof(fp)))
{
c=fgetc(fp);
hexstr+=AnsiString(IntToHex(c,2));
}
这样一段代码,用来读取一个文件,然后转换成16进制方式,赋给hexstr
问题是:为什么结果hexstr末尾多出来了个"FF"?
...全文
25
18
打赏
收藏
关于文件的读取的一个问题
FILE *fp; unsigned char c; AnsiString hexstr=""; fp=fopen("d:\\documents\\ttt.txt","rb"); while(!(feof(fp))) { c=fgetc(fp); hexstr+=AnsiString(IntToHex(c,2)); } 这样一段代码,用来读取一个文件,然后转换成16进制方式,赋给hexstr 问题是:为什么结果hexstr末尾多出来了个"FF"?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
18 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
netying
2003-03-18
打赏
举报
回复
谢谢,明白了,看来feof(fp)这个东西不能用
在我眼里,文件并没有文本和二进制的区别
另:do{}while()我用了,一样的,也是多一个FF出来
jishiping
2003-03-18
打赏
举报
回复
fseek这个函数是移动文件指针,不是判断文件是否结束。如果文件不存在,fopen()就会返回
NULL,或者文件被其它程序打开(非共享打开的),那么fopen()也返回NULL。
yesry
2003-03-18
打赏
举报
回复
不要while(){}
要do{}while();
jishiping
2003-03-18
打赏
举报
回复
“那么下边两段代码应该效果一样吧?”
上面已经说的很清楚了,对于文本文件来说一样,但是对于二进制文件来说,就不一样了。
二进制文件不能用feof判断。
netying
2003-03-18
打赏
举报
回复
那多谢谢了!看来用第二种方法是通用的了
那么fp什么时候会等于NULL?就是说fseek这个函数如何判断文件末尾?
jishiping
2003-03-18
打赏
举报
回复
作为一个好的习惯,在使用fopen()函数时,需要判断返回的文件指针是否为0,如果为0,
表示打开文件失败。如果此时使用其他函数读取文件,会造成程序死掉。所以需要fopen()
的返回值是否为NULL。
netying
2003-03-18
打赏
举报
回复
如果feof(fp)可以正确判断文件的末尾,那么下边两段代码应该效果一样吧?
另外FF真的可以表示文件末尾么??
===================================================
while(1)
{
c=fgetc(fp);
if (feof(fp)) break;
hexstr+=AnsiString(IntToHex(c,2));
}
=================================================
fp=fopen("d:\\documents\\ttt.txt","rb");
if (fp != NULL) {
fseek(fp, 0, SEEK_END); //移到文件末尾
int nSize = ftell(fp); //取得文件长度
fseek(fp, 0, SEEK_SET); //移到文件开头
while(nSize-- > 0)
{
c = fgetc(fp);
hexstr+=AnsiString(IntToHex(c,2));
}
fclose(fp);
}
jishiping
2003-03-18
打赏
举报
回复
就是 fyje(无言相对) 说的,是文件结束符,使用feof判断时,必须读到文件结束符(就是FF)
时feof(fp)才返回TRUE,所以如果是二进制文件,且中间有FF字符的话,用feof判断的话就会
发生读不完就结束。所以对二进制文件的读取,不能使用feof判断文件是否结束。对于文本文
件时,使用fgetc读的话,最后就会读到一个FF(表示文件结束),然后feof才返回TRUE。所
以如果非要象你开始那样写的,就必须先读字符,再判断。如果是FF字符,就退出循环。
netying
2003-03-18
打赏
举报
回复
那是不是说feof并不能真正判断一个文件的末尾?
netying
2003-03-18
打赏
举报
回复
to jishiping:你这段看来不错,我试一下,谢谢,
同时希望你能否解释一下我那段代码为什么会这样?
jishiping
2003-03-18
打赏
举报
回复
有区别,一个是先判断再读,一个是先读再判断。
netying
2003-03-18
打赏
举报
回复
TO 小虫:是空格,但是文件中本身并没有这个内容的
jishiping
2003-03-18
打赏
举报
回复
有的文件中间也有FF这样的值啊!那还如何区分文件是否结束?
这样写:
fp=fopen("d:\\documents\\ttt.txt","rb");
if (fp != NULL) {
fseek(fp, 0, SEEK_END); //移到文件末尾
int nSize = ftell(fp); //取得文件长度
fseek(fp, 0, SEEK_SET); //移到文件开头
while(nSize-- > 0)
{
c = fgetc(fp);
hexstr+=AnsiString(IntToHex(c,2));
}
fclose(fp);
}
netying
2003-03-18
打赏
举报
回复
请问jishiping,你这段代码和我那段好象没有区别啊
weibz0525
2003-03-18
打赏
举报
回复
FF==255==空格符
jishiping
2003-03-18
打赏
举报
回复
while(1)
{
c=fgetc(fp);
if (feof(fp)) break;
hexstr+=AnsiString(IntToHex(c,2));
}
netying
2003-03-18
打赏
举报
回复
可是有的文件中间也有FF这样的值啊!那还如何区分文件是否结束?
fyje
2003-03-18
打赏
举报
回复
文件结束符
读取
某人的消息列表
1. 数据存储:在实现消息列表的
读取
功能时,首先需要
一个
可靠的数据存储系统。这可能是关系型数据库(如MySQL、PostgreSQL)或非关系型数据库(如MongoDB、Redis)。数据模型通常包含用户信息、消息ID、发送者、接收...
XML
文件
要
读取
的XML
文件
poi.jar 全部jar包程序
文件
Apache POI是
一个
强大的开源库,专为处理Microsoft Office格式的
文件
而设计,特别是针对Excel(.xlsx 和 .xls)文档。在Java开发环境中,Apache POI提供了 poi.jar 包,它是进行Excel数据
读取
和写入的核心库。本篇...
commons-codec-1.8官方JAR包程序
文件
commons-codec-1.8官方JAR包,供亲们下载~~~
itextsharp.dll5.4.4
iTextSharp是
一个
强大的开源库,主要用于在C#中创建、修改和处理PDF文档。这个库在版本5.4.4中提供了对PDF的全面支持,包括
读取
、写入、编辑和签名PDF
文件
。在提供的压缩包中,包含了iTextSharp的dll
文件
,这是编译...
C++ Builder
13,871
社区成员
102,694
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章