物聯網學習教程—檔案的定位

千鋒教育官方發表於2019-08-23

檔案的定位

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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章