c语言二fseek从文件头移动_编程C语言文件的随机读写
實(shí)現(xiàn)隨機(jī)讀寫的關(guān)鍵是要按要求移動(dòng)位置指針,這稱為文件的定位。
文件定位
移動(dòng)文件內(nèi)部位置指針的函數(shù)主要有兩個(gè),即rewind()和fseek()。rewind函數(shù)前面已多次使用過,其調(diào)用形式為:??? rewind(文件指針);它的功能是把文件內(nèi)部的位置指針移到文件首。下面主要介紹fseek函數(shù)。fseek函數(shù)用來移動(dòng)文件內(nèi)部位置指針,其調(diào)用形式為:??? fseek(文件指針,位移量,起始點(diǎn));其中:
“文件指針”指向被移動(dòng)的文件。
“位移量”表示移動(dòng)的字節(jié)數(shù),要求位移量是long型數(shù)據(jù),以便在文件長(zhǎng)度大于64KB 時(shí)不會(huì)出錯(cuò)。當(dāng)用常量表示位移量時(shí),要求加后綴“L”。
“起始點(diǎn)”表示從何處開始計(jì)算位移量,規(guī)定的起始點(diǎn)有三種:文件首,當(dāng)前位置和文件尾。
其表示方法如下表:
起始點(diǎn)
表示符號(hào)
例如:? ? fseek(fp,100L,0);其意義是把位置指針移到離文件首100個(gè)字節(jié)處。還要說明的是fseek函數(shù)一般用于二進(jìn)制文件。在文本文件中由于要進(jìn)行轉(zhuǎn)換,故往往計(jì)算的位置會(huì)出現(xiàn)錯(cuò)誤。
文件的隨機(jī)讀寫
在移動(dòng)位置指針之后,即可用前面介紹的任一種讀寫函數(shù)進(jìn)行讀寫。由于一般是讀寫一個(gè)數(shù)據(jù)據(jù)塊,因此常用fread和fwrite函數(shù)。下面用例題來說明文件的隨機(jī)讀寫。【例13-8】在學(xué)生文件stu_list中讀出第二個(gè)學(xué)生的數(shù)據(jù)。#include
struct stu{
char name[10];
int num;
int age;
char addr[15];
}boy,*qq;
main(){
FILE *fp;
char ch;
int i=1;
qq=&boy;
if((fp=fopen("stu_list","rb"))==NULL){
printf("Cannot open file strike any key exit!");
getch();
exit(1);
}
rewind(fp);
fseek(fp,i*sizeof(struct stu),0);
fread(qq,sizeof(struct stu),1,fp);
printf("\n\nname\tnumber age addr\n");
printf("%s\t%5d %7d %s\n",qq->name,qq->num,qq->age,qq->addr);
}文件stu_list已由【例13-6】的程序建立,本程序用隨機(jī)讀出的方法讀出第二個(gè)學(xué)生的數(shù)據(jù)。程序中定義boy為stu類型變量,qq為指向boy的指針。以讀二進(jìn)制文件方式打開文件,程序第19行移動(dòng)文件位置指針。其中的i值為1,表示從文件頭開始,移動(dòng)一個(gè)stu類型的長(zhǎng)度,然后再讀出的數(shù)據(jù)即為第二個(gè)學(xué)生的數(shù)據(jù)。
總結(jié)
以上是生活随笔為你收集整理的c语言二fseek从文件头移动_编程C语言文件的随机读写的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: centos7 mysql安装配置_my
- 下一篇: 申报个人所得税步骤 三个步骤就可以完成