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

C/C++ 取得檔案大小的 4 種方法完整代碼對比

     編輯:C++ 入門

前言

專案中頻繁需要取得檔案大小,C/C++ 提供多種 API,各有適用場景與平台差異。本文整理 4 種常用方法並給出可直接編譯的代碼。

方法一:_stat / stat(跨平台、C 標準庫)


#include 
#include 
using namespace std;

int main() {
    const char* filepath = "..\\test.ncb";
    struct _stat info;
    _stat(filepath, &info);  // Linux 用 stat()
    int size = info.st_size;
    cout << "Size: " << size << endl;
    return 0;
}
  • 優點:標準 C、跨平台(Windows _stat,POSIX stat)、不需開啟檔案。
  • 缺點:某些檔案系統可能不支援 64 位大小(需用 _stati64/stat64)。

方法二:fopen + filelength(C 標準庫 + POSIX/Windows 擴充)


#include 
#include   // Windows filelength 需此

int main() {
    const char* filepath = "..\\test.ncb";
    FILE* file = fopen(filepath, "rb");
    if (file) {
        int size = filelength(fileno(file));  // Linux 用 fseek/ftell 組合
        printf("Size: %d\n", size);
        fclose(file);
    }
    return 0;
}
  • 需開啟檔案,filelength 非標準 C(Windows/MSVC 擴充),Linux 需自行 fseek(fp,0,SEEK_END); size=ftell(fp);。

方法三:MFC CFile::GetLength(Windows MFC 專案)


#include   // MFC 核心

int main() {
    const char* filepath = "..\\test.ncb";
    CFile cfile;
    if (cfile.Open(filepath, CFile::modeRead)) {
        int size = cfile.GetLength();
        printf("Size: %d\n", size);
        cfile.Close();
    }
    return 0;
}
  • 優點:MFC 專案原生、自動處理 64 位大小(回傳 ULONGLONG)、編碼安全。
  • 缺點:綁定 MFC,非 MFC 專案引入成本高。

方法四:Win32 API CreateFile + GetFileSize(Windows 原生、支援 64 位)


#include 
#include 

int main() {
    const char* filepath = "..\\test.ncb";
    HANDLE h = CreateFile(filepath, FILE_READ_EA, FILE_SHARE_READ, NULL,
                          OPEN_EXISTING, 0, NULL);
    if (h != INVALID_HANDLE_VALUE) {
        DWORD size = GetFileSize(h, NULL);  // 僅回傳低 32 位
        // 大檔案需用 GetFileSizeEx (Win2000+)
        printf("Size: %u\n", size);
        CloseHandle(h);
    }
    return 0;
}

進階:GetFileSizeEx 支援 64 位大小 (Windows 2000+)


LARGE_INTEGER size;
GetFileSizeEx(h, &size);  // size.QuadPart 為 64 位檔案大小
printf("Size: %lld\n", size.QuadPart);

快速選擇指南

場景推薦方法
跨平台 C/C++ 專案stat/_stat (含 64 位版)
Windows 獨立程式、無 MFCGetFileSizeEx (Win32 API)
MFC 專案CFile::GetLength
已開啟 FILE* 流fseek/ftell 或 filelength

延伸閱讀

  • C++ 運算子多載與輸入輸出流詳解
  • C++、Java 與 C# 命名規範總結
  • Eclipse 下 C/C++ 環境搭建
  • Java 與 C++ 語言在作用域上的差異淺析
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved