程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C >> 關於C >> C語言返回文件大小的功能(fseek和ftell的使用)

C語言返回文件大小的功能(fseek和ftell的使用)

編輯:關於C

需求:有時候讀文件時,需要知道文件的字符總的個數,可能是為了提前定義緩沖區大小或者拷貝文件等等。也可以用於動態創建數組。

在進行這兩個問題之前,先來了解一下兩個函數,這兩個函數配合就能夠實現計算大小的功能。

函數 一:fseek

stdio中的庫函數:

函數原型:int fseek(FILE *stream, long int offset, int whence);

功能:設定文件指針的位置

參數:

stream: 需要讀取的文件流。

whence:文件源指針的位置,值可以是這三個中的一個:SEEK_SET、SEEK_CUR、SEEK_END分別表示文件開頭位置,文件當前位置,文件結尾位置。

offset:表示以 whence為基點的偏移量的大小。

所以這個函數的整體功能是:從任意位置比如最常用的SEEK_SET、SEEK_CUR、SEEK_END,移動文件指針,移動的大小為offset。函數執行之後,文件指針就移動到了whence + offset位置處。

返回值:執行成功返回0,執行失敗返回非零。

函數二:ftell

stdio中的庫函數:

函數原型: long int ftell(FILE *stream);

功能:當前文件讀寫位置。

返回值:是當前讀寫位置偏離文件頭部的字節數.

 


所以由fseek設定文件指針的位置,再由ftell計算從文件開頭到fseek獲取的位置的字節數。

實例代碼如下:


[html]
include <stdio.h> 
#include <stdlib.h> 
 
int main() 

FILE * fp; 
fp = fopen("addoverflowDemo.c","r"); 
if(fp == NULL){ 
        return -1; 

 
//int fseek(FILE *stream, long int offset, int whence); 獲取起始位置 
fseek(fp,0,SEEK_END); 
//long int ftell(FILE *stream);計算開頭到fseek位置的字符數 
int value; 
value = ftell(fp); 
printf("字符數為:%d\n",value); 
 
return EXIT_SUCCESS; 

include <stdio.h>
#include <stdlib.h>

int main()
{
FILE * fp;
fp = fopen("addoverflowDemo.c","r");
if(fp == NULL){
        return -1;
}

//int fseek(FILE *stream, long int offset, int whence); 獲取起始位置
fseek(fp,0,SEEK_END);
//long int ftell(FILE *stream);計算開頭到fseek位置的字符數
int value;
value = ftell(fp);
printf("字符數為:%d\n",value);

return EXIT_SUCCESS;
}

編譯連接運行結果如下:


[html]
[root@localhost program]# ./getsizeDemo  
字符數為:309 

[root@localhost program]# ./getsizeDemo
字符數為:309


 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved