首頁 >後端開發 >C++ >如何使用 C 的 `tellg()` 函數準確地決定檔案的大小?

如何使用 C 的 `tellg()` 函數準確地決定檔案的大小?

Barbara Streisand
Barbara Streisand原創
2024-12-09 10:00:19632瀏覽

How Can I Accurately Determine a File's Size Using C  's `tellg()` Function?

tellg() 估計檔案大小的誤解

C 中的tellg() 函數旨在傳回代表特定值的標記值檔案內的位置。稍後可使用該值使用eekg() 函數跳回該位置。但要注意的是,tellg() 並不會直接提供檔案的大小(以位元組為單位)。

在提供的程式碼中:

void read_file(const char* name, int *size, char*& buffer) {
  ifstream file;

  file.open(name, ios::in | ios::binary);
  *size = 0;
  if (file.is_open()) {
    // Get length of file
    file.seekg(0, std::ios_base::end);
    int length = *size = file.tellg();
    file.seekg(0, std::ios_base::beg);

    // Allocate buffer in size of file
    buffer = new char[length];

    // Read
    file.read(buffer, length);
    cout << file.gcount() << endl;
  }
  file.close();
}

對 file.tellg() 的呼叫用來估計檔案的大小。然而,這種方法是不正確的,因為tellg()不會直接傳回檔案大小。

確定檔案大小的正確方法

準確地確定檔案的大小以位元組為單位,建議使用以下方法:

#include <limits>

file.ignore(std::numeric_limits<std::streamsize>::max());
std::streamsize length = file.gcount();
file.clear();   // Since ignore will have set eof.
file.seekg(0, std::ios_base::beg);

此程式碼讀取檔案直到末尾,並且gcount()函數會傳回讀取的位元組數。該值代表檔案的實際大小。

附加說明

  • 變數緩衝區應宣告為 char** 而非 char* 才能正確指向字元陣列。
  • 建議使用 std::vector或 std::string 而不是動態分配內存,以簡化記憶體管理並避免洩漏。
  • 最終列印循環中的循環條件應該是 i

以上是如何使用 C 的 `tellg()` 函數準確地決定檔案的大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn