关于文件的操作中随机读取位置
rewind(fp);
printf("%ld\n",ftell(fp));//0
//update the content of ftell.txt with "hello"
fputs("hello",fp);
//print the current position of fp
printf("%ld\n",ftell(fp--));//5
printf("%ld\n",ftell(fp));//4
fclose(fp);
ftell.txt文件中原来存储的内容是Fishc,我rewind以后,存入hello,
这时候使用ftell(fp),打印得到5,同时fp指针执行fp--,
再打印时不应该是4吗
但是打印结果为0,请问这是为什么呢 本帖最后由 jackz007 于 2019-10-18 10:01 编辑
文件指针是个 handle,就是一个句柄,用来代表被读写的文件,在用 fopen() 函数打开文件的时候,由系统分配得到这个指针,文件操作完毕以后,要用 fclose() 函数进行关闭,用户永远不可以自行改变文件指针的数值。可以改变的应该是文件的读写指针位置,而不是文件指针本身,读写指针会随着文件的读写操作而自动改变。所以,下面这一句是错误用法:
printf("%ld\n",ftell(fp--));//5
我想,你的代码应该写成这样:
#include <stdio.h>
main()
{
FILE * fp ;
if((fp = fopen("ftell.txt" , "w")) != NULL) {
fputs("I love Fishc\n" , fp) ;
printf("ftell() = %d\n" , ftell(fp)) ;
rewind(fp) ;
printf("ftell() = %d\n" , ftell(fp)) ;
fputs("hello\n" , fp) ;
printf("ftell() = %d\n" , ftell(fp)) ;
fclose(fp) ;
}
} jackz007 发表于 2019-10-18 09:56
文件指针是个 handle,就是一个句柄,用来代表被读写的文件,在用 fopen() 函数打开文件的时候,由 ...
嗯,你说的意思我明白。
但对于这个随机读取位置还是有疑问,假如我在rewind并重新写入hello之后,想要只修改两个LL为mm,我怎样实现这个“随机”定位?
不使用fp指针,怎样对文件中的某个中间位置的内容进行修改呢? 海-啵啵鱼 发表于 2019-10-18 10:53
嗯,你说的意思我明白。
但对于这个随机读取位置还是有疑问,假如我在rewind并重新写入hello之后,想要 ...
文本文件的修改一般都会改变文件长度,所以,文本文件的修改不适合随机读写方式。
对文本文件的修改一般会另外创建一个新文件,逐行读取老文件内容,修改过后再保存到新文件。然后删除老文件,重命名新文件。
页:
[1]