- 三個函數(shù):
//移動文件指針到文件開始位置
void rewind(FILE *pf)
//獲取文件當(dāng)前指針距離文件開始位置的字節(jié)數(shù)
long ftell(FILE *pf)
//移動文件指針到指定位置
//WHENCE取值 // SEEK_SET :offset的取值是相對于文件開始的一個絕對值,必須為正數(shù)或者0 //SEEK_CUR : offset的取值是相對于當(dāng)前文件指針的一個相對值,可正可負 //SEEK_END: offset的取值是相對于文件結(jié)尾的一個值,為0或者為負數(shù)
int fseek(FILE *pf, long offset, int WHENCE)
- 一個簡單的demo,應(yīng)用三個函數(shù),計算并顯示一個文件的長度
#include <stdio.h>
#include <stdlib.h>
long get_file_length(FILE * pf);
char * get_length_unit(long length);
int main(void){ char * path = "E:/test.txt"; FILE * pf = fopen(path, "r+"); if(pf == NULL){ perror("open file err"); return 0; } long length = get_file_length(pf); char * size = get_length_unit(length); printf("the file:%s 's length is %s\n",path, size); free(size); //釋放分配的內(nèi)存 fclose(pf); //關(guān)閉文件 getchar(); return 0; } // windows下?lián)Q行符占2個字節(jié), linux下?lián)Q行符占一個字節(jié) // windows下文件不需要結(jié)束符, linux下的文件會自動增加一個結(jié)束符 // 獲取文件長度 long get_file_length(FILE * pf){ fseek(pf, 0, SEEK_END); //移動文件指針到文件的結(jié)尾處 long retVal = ftell(pf); //獲取文件當(dāng)前指針距離文件開始處的字節(jié)數(shù),就是文件的長度 if(retVal < 0){ perror("calc file length err"); //如果讀取失敗,顯示錯誤信息 clearerr(pf); //清除錯誤信息以及相關(guān)指示器 } rewind(pf); //移動文件指針到文件的開始處 return retVal; //返回文件的長度 } // 根據(jù)文件的長度,顯示成b, kb, mb的單位形式 char * get_length_unit(long length){ char * retVal = malloc(30 * sizeof(char)); if(length <= 1024){ sprintf(retVal, "%ld%s", length, "b"); }else if(length <= 1024 * 1024){ sprintf(retVal, "%.2f%s", length * 1.0 / 1024, "kb"); }else{ sprintf(retVal, "%.2f%s", length * 1.0 / (1024 * 1024), "mb"); } return retVal; }