首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C >> 關於C

C 語言 fseek 與 ftell 取得檔案大小

     編輯:關於C

利用檔案指標定位與位移量計算檔案位元組數

在 C 語言中,fseek() 與 ftell() 組合是取得檔案大小的標準做法。原理:將檔案指標移至檔案尾端,再查詢相對檔案開頭的位移量,即為檔案總位元組數。此法適用於二進位與文字檔,常用於動態配置讀取緩衝區或檔案複製前預估空間。

關鍵函數原型

int fseek(FILE *stream, long offset, int whence);
long ftell(FILE *stream);
  • whence:SEEK_SET(開頭)、SEEK_CUR(目前)、SEEK_END(結尾)。
  • offset:相對 whence 的位移量。
  • ftell 回傳目前位置距檔案開頭的位元組數。

標準取得檔案大小流程

FILE *fp = fopen("filename", "rb");  // 建議用二進位模式避免換行轉換
if (fp) {
    fseek(fp, 0, SEEK_END);          // 移至檔案結尾
    long size = ftell(fp);           // 取得位移量 = 檔案大小
    fclose(fp);
    printf("檔案大小:%ld bytes\n", size);
}

完整可執行範例

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

int main() {
    FILE *fp = fopen("addoverflowDemo.c", "rb");
    if (!fp) { perror("開檔失敗"); return -1; }

    fseek(fp, 0, SEEK_END);
    long fsize = ftell(fp);
    fclose(fp);

    printf("檔案位元組數:%ld\n", fsize);
    return 0;
}

注意事項

  • 文字模式下 Windows 會將 \r\n 轉為 \n,導致 ftell 傳回值小於實體磁碟大小;建議一律用 "rb" 開啟。
  • 超過 2GB 檔案需使用 fseeko/ftello (off_t) 或平台專用 API (如 _fseeki64)。
  • fseek 成功回傳 0,失敗回傳非 0,生產級代碼應檢查回傳值。

此技巧為 C 語言檔案處理核心技能,廣泛應用於檔案上傳驗證、記憶體映射預分配、串流媒體分段等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved