如何判断文件指针到文件尾的长度?

shanzengguang 2009-03-09 05:34:23
fread(buff,100,1,fp);


循环读取文件
每次读100字节,当读到文件最后不到100字节的地方,如何判断还有多少字节没有读取?
希望大虾们用具体代码答复。

...全文
491 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
扛一肩记忆 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shanzengguang 的回复:]
多谢楼上回答 ,不过可能是我没有说清楚我的问题

1:我是循环读取这个文件,也就是说每次读到文件尾的时候,都要从文件开头再次读此文件。
2:每次读100字节的内容,当你读到文件最后不足100的时候,假设说只剩下x(x <100字节)。
3:此时你读完这x个字节后,会从文件开头再读(100-x)个字节。

x如何判断?
[/Quote]

你再用fseek定位回去不久行了,楼主变通一下啦
扛一肩记忆 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dongpy 的回复:]
int cur = ftell( fp );
int end = fseek( fp, 0, SEEK_END );
int bytes = end - cur;
[/Quote]
就是这样的
sh365 2009-03-10
  • 打赏
  • 举报
回复
int n = fread(buff,1,100,fp);
这种方式很好的啊
dongpy 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 shanzengguang 的回复:]
多谢楼上回答 ,不过可能是我没有说清楚我的问题

1:我是循环读取这个文件,也就是说每次读到文件尾的时候,都要从文件开头再次读此文件。
2:每次读100字节的内容,当你读到文件最后不足100的时候,假设说只剩下x(x <100字节)。
3:此时你读完这x个字节后,会从文件开头再读(100-x)个字节。

x如何判断?
[/Quote]
FILE*fp = fopen(/*...*/);
while(1)
{
int n = fread(buff,1,100,fp);
if ( n < 100 ) //最后一组数据小于100,则从开头再读取
{
fseek( fp, 0, SEEK_SET );
fread(buff+n,1,100-n,fp);
}
}
shanzengguang 2009-03-09
  • 打赏
  • 举报
回复
能解释一下
fread(buff,1,100,fp);
fread(buff,100,1,fp);
在实际中的区别吗?

谢谢!!
traceless 2009-03-09
  • 打赏
  • 举报
回复
方法:先获得文件末尾的指针值,每次读取完后,再获得文件位置指针的当前值
两者相减,如果小于100,则达到

int curfp;//当前文件指针值
int endfp;//文件末尾指针值

fseek( fp, 0, SEEK_END ); //先让指针指向末尾
endfp = ftell( fp ); //读取末尾指针值
//....
curfp = ftell( fp ); //读取文件当前指针值
//....
if((endfp-curfp) < 100) //判断,如小于100,则....
// ...





ctan 2009-03-09
  • 打赏
  • 举报
回复
size_t n;
n = fread(buff,1,100,fp);
while(n==100)
{
n = fread(buff,1,100,fp);
}
最后就是你想要的x了
ctan 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 shanzengguang 的回复:]
引用 8 楼 ctan 的回复:
开始调用fread函数时, 读取正常时它会返回100, 最后一次读的时候, 你还是让它读100字节, 但它只会返回x,
楼主可以据此来判断已经读完, 并知道最后一次读了多少

应该是返回1吧?
100是它要读的size,不是size的个数
[/Quote]
这样
fread(buff,1,100,fp);
就可以了
chaojiew 2009-03-09
  • 打赏
  • 举报
回复
只能读完再判定
shanzengguang 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ctan 的回复:]
开始调用fread函数时, 读取正常时它会返回100, 最后一次读的时候, 你还是让它读100字节, 但它只会返回x,
楼主可以据此来判断已经读完, 并知道最后一次读了多少
[/Quote]
应该是返回1吧?
100是它要读的size,不是size的个数
shanzengguang 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dongpy 的回复:]
int cur = ftell( fp );
int end = fseek( fp, 0, SEEK_END );
int bytes = end - cur;
[/Quote]

fseek函数成功,返回的是0吧?
ctan 2009-03-09
  • 打赏
  • 举报
回复
开始调用fread函数时, 读取正常时它会返回100, 最后一次读的时候, 你还是让它读100字节, 但它只会返回x,
楼主可以据此来判断已经读完, 并知道最后一次读了多少
  • 打赏
  • 举报
回复
fread会一直读到没有数据啊,就算最后一次数据不足100字节,它也会把不足的读完,并返回成功读取的字节数啊。
shanzengguang 2009-03-09
  • 打赏
  • 举报
回复
多谢楼上回答 ,不过可能是我没有说清楚我的问题

1:我是循环读取这个文件,也就是说每次读到文件尾的时候,都要从文件开头再次读此文件。
2:每次读100字节的内容,当你读到文件最后不足100的时候,假设说只剩下x(x<100字节)。
3:此时你读完这x个字节后,会从文件开头再读(100-x)个字节。

x如何判断?

xqls_xqls 2009-03-09
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 dongpy 的回复:]
int cur = ftell( fp );
int end = fseek( fp, 0, SEEK_END );
int bytes = end - cur;
[/Quote]

OK
wjhaitbl 2009-03-09
  • 打赏
  • 举报
回复
up
dongpy 2009-03-09
  • 打赏
  • 举报
回复
int cur = ftell( fp );
int end = fseek( fp, 0, SEEK_END );
int bytes = end - cur;
wuyu637 2009-03-09
  • 打赏
  • 举报
回复
while (feof(fp) == 0)
{
fread(....);
fwrite(...);
}
topwork 2009-03-09
  • 打赏
  • 举报
回复
假如最后剩8个字节没有读出,你再读一次返回值是8。要是再读一次,返回值是0。

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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