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

C 語言精確獲取檔案大小並動態分配記憶體讀取完整範例

     編輯:關於C語言

C 語言精確獲取檔案大小並動態分配記憶體讀取完整範例

應用場景

需將整個檔案讀入記憶體處理 (如解碼),先獲取大小可精確 malloc,避免浪費或不足。

標準流程

  1. fopen 開啟檔案 (二進位模式 "rb")。
  2. fseek(fp, 0, SEEK_END) 移至檔案尾。
  3. ftell(fp) 取得位移 = 檔案大小 (位元組)。
  4. fseek(fp, 0, SEEK_SET) 回到檔案頭。
  5. malloc(size) 分配精確記憶體。
  6. fread(buf, 1, size, fp) 一次讀完。
  7. 檢查 fread 返回值與 malloc 失敗。
  8. fclose 關閉檔案。

完整程式碼

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

int main() {
    FILE *fp = fopen("data.bin", "rb");
    if (!fp) { perror("開啟失敗"); return 1; }

    fseek(fp, 0, SEEK_END);
    long size = ftell(fp);
    fseek(fp, 0, SEEK_SET);

    printf("檔案大小: %ld 位元組\n", size);

    unsigned char *buf = malloc(size);
    if (!buf) { perror("記憶體不足"); fclose(fp); return 1; }

    size_t read = fread(buf, 1, size, fp);
    if (read != size) { fprintf(stderr, "讀取不完整\n"); }

    // 處理 buf...

    free(buf);
    fclose(fp);
    return 0;
}

注意事項

  • ftell 返回 long,大於 2GB 檔案在 32 位系統可能溢位,建議用 fseeko/ftello (POSIX) 或 _fseeki64 (Windows)。
  • 文字模式開啟會轉換換行符,導致大小不準,必須用二進位模式 "rb"。
  • 大檔案建議分塊讀取或使用記憶體映射 (mmap/MapViewOfFile)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved