首頁 > 後端開發 > C++ > 如何在 C 中準確地確定檔案的大小而不是使用 `tellg()`?

如何在 C 中準確地確定檔案的大小而不是使用 `tellg()`?

Barbara Streisand
發布: 2024-12-16 11:02:14
原創
989 人瀏覽過

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

tellg() 函數與檔案大小調整

tellg() 是C 語言中的函數,用於擷取檔案中的當前位置。但是,請務必注意,tellg() 不提供檔案的實際大小(以位元組為單位)。相反,它會傳回一個標記值,稍後​​可以使用該值來返回相同位置。

在提供的程式碼中,似乎對tellg() 的預期行為有誤解。程式碼使用tellg() 來確定檔案的大小,然後用於分配緩衝區來保存檔案內容。但是,不應依賴tellg() 來實現此目的。

根據 C 語言規範,tellg() 傳回特定於實作的標記值。雖然它通常對應於 Unix 系統中的位元組偏移量,但在 Windows 下不能保證這種行為。在文字模式下,Windows 可能會傳回大於到達目前位置所需的實際位元組數的值。

要準確地確定檔案的大小,建議使用替代方法,例如:

#include <limits>

...

file.ignore(std::numeric_limits<std::streamsize>::max());
std::streamsize length = file.gcount(); // Retrieve the size of the file in bytes
file.clear(); // Reset the file stream
file.seekg(0, std::ios_base::beg); // Return to the beginning of the file
登入後複製

此外,提供的程式碼中存在幾個問題:

  • * buffer = new char[length];應更正為buffer = new char[length];。
  • 使用 int 表示 size 不合適;應改用 std::streamsize。
  • 不提供錯誤處理,以防檔案無法開啟。

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

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板