当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 13 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-05 20:21 

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


页首
 用户资料  
 
2 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-05 21:16 
头像

注册: 2007-09-14 21:03
帖子: 1143
地址: 浙江
送出感谢: 1
接收感谢: 1
代码:
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!


页首
 用户资料  
 
3 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-06 10:57 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
hellojinjie,
o,我在windows下用的忘了还有ubuntu的man啊,谢谢提醒
最后说的是不是用
while (feof(fp) != 0)
{
fread(....);
fwrite(...);
}


页首
 用户资料  
 
4 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-06 13:14 
头像

注册: 2007-09-29 3:09
帖子: 5773
送出感谢: 0 次
接收感谢: 3
!=EOF吧
文件末尾是-1吧...


_________________
HUNT Unfortunately No Talent...


页首
 用户资料  
 
5 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-06 13:48 
头像

注册: 2007-09-14 21:03
帖子: 1143
地址: 浙江
送出感谢: 1
接收感谢: 1
HuntXu 写道:
!=EOF吧
文件末尾是-1吧...

:em06 :em06
大一学的C语言都忘了。。。。。


_________________
Say hello to everyday!


页首
 用户资料  
 
6 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-06 14:38 

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


页首
 用户资料  
 
7 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-06 14:44 

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


页首
 用户资料  
 
8 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-06 22:07 
头像

注册: 2007-09-14 21:03
帖子: 1143
地址: 浙江
送出感谢: 1
接收感谢: 1
pthread是linux下用clone系统调用实现的线程库,在win下当然不能直接拿来用了.

你说的好像有点乱啊,win下有自己的线程库,这个如果只是看论坛里的几篇帖子恐怕是学不透的吧,还是弄本书看看吧


_________________
Say hello to everyday!


页首
 用户资料  
 
9 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-07 11:02 

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


页首
 用户资料  
 
10 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-07 13:46 

注册: 2008-05-24 1:24
帖子: 338
送出感谢: 0 次
接收感谢: 0 次
-1 也许是 EOF ,也许不是,看具体实现,所以建议大家用宏(例如 EOF)而不是数字

另外,对标准输入函数,返回 EOF 可能是由读到文件尾引起或者读错误引起,所以用 EOF 有某些情况下不够准确,比较好的方法是用 feof() 函数判断


_________________
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病


页首
 用户资料  
 
11 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-07 13:48 

注册: 2008-05-24 1:24
帖子: 338
送出感谢: 0 次
接收感谢: 0 次
楼主最近问题不少,买一本 《C Primer Plus 中文版》,可解心中之惑 :)


_________________
如果努力的目的是为了超越他人,那么我们永远成功不了
大道是平的,我们该做的是让自己快乐,同时带给他人快乐
好好涵养自己的性格
才华是刀刃,辛苦是磨刀石
多食果蔬,健康长寿;少吃不吃鱼肉,珍爱它类生命,远离自身疾病


页首
 用户资料  
 
12 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-07 14:21 

注册: 2008-07-10 15:08
帖子: 448
送出感谢: 0 次
接收感谢: 0 次
听大侠说这话。我真是有点惭愧,手上有这本书,读的有点粗,
而且感觉老是书上写的到正真自己用的时候就配不上了,还得多读多写啊,


页首
 用户资料  
 
13 楼 
 文章标题 : Re: fread如何判断读到了文件的末尾?
帖子发表于 : 2008-11-07 14:27 
头像

注册: 2007-03-13 11:23
帖子: 1343
送出感谢: 0 次
接收感谢: 0 次
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/


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 13 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译