物联网学习教程—文件的定位

文件的定位

1. rewind函数

rewind函数可以强制使当前工作指针指向文件的开头。一般在要重新从头读写文件时使用。如下例,在读了文件dfr.dat一遍送显示器后,文件的位置指针已移到文件的最后,为了重新读一遍再写到文件dfw.dat中,必须先执行一次rewind函数,才能正确读出。

1  将已建好的文件dfr.dat的内容顺序读一遍送显示器, 再读一遍复制到文件dfw.dat中。

include<stdio.h>

main( )

{ int i;

char ch;

float f, f1;

FILE *fp1, *fp2;

if((fp1=fopen("dfr.dat", "r"))==NULL)

{ printf("Can not open the file for reading\n");

exit(0);

}

if((fp2=fopen("dfw.dat", "w"))==NULL)

{printf("Can not open the file for writing\n");

exit(0);

}

fscanf(fp1, "%c %d %f", &ch, &i, &f);

printf("%c, %5d, %4.1f\n", ch, i, f);

rewind(fp1);

fscanf(fp1, "%c %d %f", &ch, &i, &f1);

fprintf(fp2, "%c %d %f", ch, i, f1);

fclose(fp1);

fclose(fp2);

}

2. fseek函数

利用fseek函数可以控制文件位置的指针进行随机读写。

fseek函数的调用形式为 fseek(文件类型指针, 位移量, 起始点);

起始点用0、1 或2 代表, 0——文件的开始, 1——当前位置, 2——文件末尾;

位移量指从起始点向前移动的字节数;

fseek函数一般用于二进制文件, 因为文本文件要发生字符转换,计算位置时容易发生混乱。

1  将例10.3形成的职工数据文件中的第1,3,5个工人的信息读出、 送显。

include<stdio.h>

define SIZE 6

struct staff

{ char name[10];

int salary;

int cost;

} worker[SIZE];

main()

{ FILE *fp;

int i;

if((fp=fopen("work.dat", "rb"))==NULL)

{printf("Can not open the file\n");

exit(0);

}

for(i=0; i<SIZE; i++, i++)

{fseek(fp, i*sizeof(struct staff), 0);

fread(&worker[i], sizeof(struct staff), 1, fp);

printf(" %s %d %d\n", worker[i].name, worker[i].salary, worker[i].cost);

}

fclose(fp);

}

若形成work.dat文件时的输入数据为

Li1 1100 100

Li2 1200 200

Li3 1300 300

Li4 1400 400

Li5 1500 500

Li6 1600 600

则此程序的运行结果为

Li1 1100 100

Li3 1300 300

Li5 1500 500

3. ftell函数

ftell函数的作用是得到流式文件中位置指针的当前位置, 用相对于文件开头的位移量来表示。

由于文件的位置指针经常移动,往往不易搞清其当前位置,用ftell()函数可以返回其当前位置,若返回-1L,表示函数调用出错。 例如,

i=ftell(fp);

if(i==-1L)printf("error\n");

 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69914734/viewspace-2654747/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69914734/viewspace-2654747/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值