fread如何判断读到了文件的末尾?

C、C++和Java语言
回复
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

fread如何判断读到了文件的末尾?

#1

帖子 weihua2008 » 2008-11-05 20:21

有一个问题就是
假若我创建一个文件file1,想将另一个已经存在的文件file2内容复制到file1当中,
用fopen、fwrite和fread三个函数可以搞定,
先打开file2,对她进行读fread,读一段然后打开file1,用fwrite写入file1
如此循环直到读完、写完为止
问题是如何知道fread读到了文件的末尾了那?
正在焦急等待高手指导
头像
hellojinjie
帖子: 1144
注册时间: 2007-09-14 21:03
来自: 浙江
送出感谢: 0
接收感谢: 0

Re: fread如何判断读到了文件的末尾?

#2

帖子 hellojinjie » 2008-11-05 21:16

代码: 全选

man fread

代码: 全选

RETURN VALUE
       fread()  and  fwrite() return the number of items successfully read or
       written (i.e., not the number of characters).  If an error occurs,  or
       the end-of-file is reached, the return value is a short item count (or
       zero).

       fread() does  not  distinguish  between  end-of-file  and  error,  and
       callers must use feof(3) and ferror(3) to determine which occurred.

代码: 全选

while (feof(fp) == 0)
{
    fread(....);
    fwrite(...);
}
Say hello to everyday!
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: fread如何判断读到了文件的末尾?

#3

帖子 weihua2008 » 2008-11-06 10:57

hellojinjie,
o,我在windows下用的忘了还有ubuntu的man啊,谢谢提醒
最后说的是不是用
while (feof(fp) != 0)
{
fread(....);
fwrite(...);
}
头像
HuntXu
论坛版主
帖子: 5778
注册时间: 2007-09-29 3:09
送出感谢: 0
接收感谢: 6 次

Re: fread如何判断读到了文件的末尾?

#4

帖子 HuntXu » 2008-11-06 13:14

!=EOF吧
文件末尾是-1吧...
HUNT Unfortunately No Talent...
头像
hellojinjie
帖子: 1144
注册时间: 2007-09-14 21:03
来自: 浙江
送出感谢: 0
接收感谢: 0

Re: fread如何判断读到了文件的末尾?

#5

帖子 hellojinjie » 2008-11-06 13:48

HuntXu 写了:!=EOF吧
文件末尾是-1吧...
:em06 :em06
大一学的C语言都忘了。。。。。
Say hello to everyday!
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: fread如何判断读到了文件的末尾?

#6

帖子 weihua2008 » 2008-11-06 14:38

用while(feof(fp)!=EOF)
试试不行
用while(feof(fp)==0)或者while(!feof(fp))都可以
feof失败返回0,所以不到末尾一直返回0,直到到了末尾返回1
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: fread如何判断读到了文件的末尾?

#7

帖子 weihua2008 » 2008-11-06 14:44

hellojinjie,
你推荐的线程连接我一看就头疼,没有头绪,
刚开始用fopen的时候有fopen,open,还有CreateFile都可以创建文件,最后说是fopen还通用
用线程的话也有几种选择,_BeginThread,Creatthread 等
这两种那个还好用啊,最想用的是pthread_create()
在linux下用的而挺好,但是在vc下无法包含pthread.h头文件,
郁闷,给点建议(主要是关于线程的使用)
头像
hellojinjie
帖子: 1144
注册时间: 2007-09-14 21:03
来自: 浙江
送出感谢: 0
接收感谢: 0

Re: fread如何判断读到了文件的末尾?

#8

帖子 hellojinjie » 2008-11-06 22:07

pthread是linux下用clone系统调用实现的线程库,在win下当然不能直接拿来用了.

你说的好像有点乱啊,win下有自己的线程库,这个如果只是看论坛里的几篇帖子恐怕是学不透的吧,还是弄本书看看吧
Say hello to everyday!
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: fread如何判断读到了文件的末尾?

#9

帖子 weihua2008 » 2008-11-07 11:02

hellojinjie,
在windows下用线程的话,是不是有几种选择,_BeginThread,Creatthread 等
我确实得找本书看看,对于_BeginThread和Creatthread 两者之间有没有 可取舍的
或者说你平时用线程的话用那种定义格式的,我好有个方向
xyywll
帖子: 338
注册时间: 2008-05-24 1:24
送出感谢: 0
接收感谢: 0

Re: fread如何判断读到了文件的末尾?

#10

帖子 xyywll » 2008-11-07 13:46

-1 也许是 EOF ,也许不是,看具体实现,所以建议大家用宏(例如 EOF)而不是数字

另外,对标准输入函数,返回 EOF 可能是由读到文件尾引起或者读错误引起,所以用 EOF 有某些情况下不够准确,比较好的方法是用 feof() 函数判断
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
xyywll
帖子: 338
注册时间: 2008-05-24 1:24
送出感谢: 0
接收感谢: 0

Re: fread如何判断读到了文件的末尾?

#11

帖子 xyywll » 2008-11-07 13:48

楼主最近问题不少,买一本 《C Primer Plus 中文版》,可解心中之惑 :)
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病
weihua2008
帖子: 448
注册时间: 2008-07-10 15:08
送出感谢: 0
接收感谢: 0
联系:

Re: fread如何判断读到了文件的末尾?

#12

帖子 weihua2008 » 2008-11-07 14:21

听大侠说这话。我真是有点惭愧,手上有这本书,读的有点粗,
而且感觉老是书上写的到正真自己用的时候就配不上了,还得多读多写啊,
头像
kofshower
帖子: 1343
注册时间: 2007-03-13 11:23
送出感谢: 0
接收感谢: 0
联系:

Re: fread如何判断读到了文件的末尾?

#13

帖子 kofshower » 2008-11-07 14:27

weihua2008 写了:hellojinjie,
在windows下用线程的话,是不是有几种选择,_BeginThread,Creatthread 等
我确实得找本书看看,对于_BeginThread和Creatthread 两者之间有没有 可取舍的
或者说你平时用线程的话用那种定义格式的,我好有个方向
windows的话不应该用pthread的线程库,也不应该用platform SDK的Creatthread API函数,用crt的那个beginthread,原因是SDK的那个没有释放线程的tls,有内存泄漏...
"We are all in the mud, but some of us are looking at the stars." (Oscar Wilde)
We are not born for ourselves.
人生天地间,并非为自己
Homepage:http://sites.google.com/site/polarisnotme/
回复

回到 “C/C++/Java”