C語言ftell()函式:獲取檔案讀寫指標的當前位置

2puT發表於2016-07-16
標頭檔案:#include <stdio.h>

ftell() 函式用來獲取檔案讀寫指標的當前位置,其原型為:
    long ftell(FILE * stream);

【引數】stream 為已開啟的檔案指標。

【返回值】成功則返回當前的讀寫位置,失敗返回 -1。

對於二進位制檔案,則返回從檔案開頭到結尾的位元組數。

對於文字檔案,返回的數值可能沒有實際意義,但仍然可以用來儲存當前的讀寫位置,供 fseek() 函式使用

在隨機方式存取檔案時,由於檔案位置頻繁的前後移動,程式不容易確定檔案的當前位置。使用fseek函式後再呼叫函式ftell()就能非常容易地確定檔案的當前位置。

ftell() 經常和 fseek() 一起使用。例如,利用 ftell() 可以方便地獲取一個檔案的長:
  1. FILE *fp = fopen("demo.txt","rb");  
  2. fseek(fp, 0L, SEEK_END);
  3. len =ftell(fp)+1;
首先將檔案的位置指標移到檔案的末尾,然後呼叫函式 ftell() 獲得當前位置相對於檔案首的位移,該位移值等於檔案所含位元組數。

【例項】在讀取檔案中的字元時,不斷讀取檔案讀寫指標的位置。
  1. #include<iostream.h>
  2. #include<stdio.h>
  3. void main(void)
  4. {
  5. FILE* stream;
  6. long l;
  7. float fp;
  8. char s[81];
  9. char c;
  10. stream = fopen("fscanf.txt","w+"); // 開啟
  11. if(stream == NULL) // 開啟檔案失敗
  12. {
  13. printf("the file is opeaned error!\n");
  14. }
  15. else //輸出資訊
  16. {
  17. fprintf(stream,"%s %ld %f %c","a_string",6500,3.1415,'x');
  18. fseek(stream,0L,SEEK_SET); // 定位檔案讀寫指標
  19. fscanf(stream,"%s",s);
  20. printf("%ld\n",ftell(stream));
  21. fscanf(stream,"%ld",&l);
  22. printf("%ld\n",ftell(stream));
  23. fscanf(stream,"%f",&fp);
  24. printf("%ld\n",ftell(stream));
  25. fscanf(stream," %c",&c);
  26. printf("%ld\n",ftell(stream));
  27. fclose(stream); // 關閉
  28. }
  29. }
執行結果:
8
13
22
24

程式首先是新建一個檔案,然後使用 fprintf() 函式寫入一些資料,再使用 fseek() 函式把檔案的讀取寫指標定位到檔案的開頭,開始讀取檔案資料,此時檔案的讀/寫指標會不斷地向後移動,程式每讀取一次資料就獲取一次檔案指標的位置並輸出。

相關文章