社区
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"?
...全文
20
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写文章
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
打赏
举报
回复
文件结束符
python
文件
的
读取
1.
文件
的
读取
1.read()
读取
整个
文件
2.readline() 每次
读取
一行
文件
3. readlines()
读取
文件
的所有行 2.
文件
的写入 1.以"x"方式打开
文件
2.以"a"方式打开
文件
3.以"w"方式打开
文件
3.
文件
的删除 4.Excel表数据的
读取
1.直接
读取
2.通过pd.ExcelFile()
读取
3.通过pd.read_excel()
读取
pd.read_excel()方法的常用参数 5.Excel表数据的写入
java 之
读取
一个
文件
内容写入到另
一个
文件
中
此文用以巩固java
文件
操作练习。 java
读取
文件
分三步操作,首先创建
文件
输入流,然后创建
文件
输入流的reader,最后创建
一个
缓冲输入流。
读取
完成后记得关闭流,后创建的流最先关闭。 1、法一:按行
读取
文件
内容示例:(先
读取
文件
内容并打印出来,然后把
读取
到的内容保存到新
文件
中) import java.io.*; public class FileDemo { public st...
C++
读取
文件
操作
C++
读取
文件
操作
java
文件
乱码_Java
文件
读取
乱码
问题
解决
使用java
读取
磁盘
文件
内容容易出现乱码,
问题
是由于java使用的编码和被
读取
文件
的编码不一致导致的。假设有
一个
test.txt的文本
文件
,
文件
内容为:“测试java
读取
中文字符串乱码
问题
”, 其中包含中文,
文件
的编码格式为GBK。 假如我们使用的java平台默认编码为UTF-8可使用System.out.println(Charset.defaultCharset());打印查看那么当我们使用...
Java逐行
读取
文件
可以使用不同的方式逐行
读取
文件
,下面我们来学习常见的几种方法。有时需要逐行
读取
文件
为字符串。例如,通过将
文件
每一行
读取
为。类打开
文件
,然后逐行
读取
其内容。下面是逐行
读取
文件
的。下面是
一个
简单的程序,显示了如何使用。是
一个
包含各种有用方法的实用程序类。方法可用于将所有
文件
行读入字符串。以
读取
模式打开
文件
,然后使用它的。到达
文件
末尾时,此方法返回。逐行
读取
文件
内容的示例程序。
C++ Builder
13,825
社区成员
102,678
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章