首頁 >後端開發 >C++ >為什麼tellg()報告的檔案大小不一致,如何準確地確定檔案大小?

為什麼tellg()報告的檔案大小不一致,如何準確地確定檔案大小?

Patricia Arquette
Patricia Arquette原創
2024-12-08 03:54:11139瀏覽

Why Does tellg() Report Inconsistent File Sizes, and How Can I Accurately Determine File Size?

tellg() 函數報告檔案大小不一致

在嘗試將檔案讀入緩衝區時,使用者在使用時可能會遇到不正確的結果tellg() 函數。與預期不同,tellg() 報告標記值而不是實際檔案大小或位元組偏移量。這種差異可以歸因於該函數的預期目的。

從技術上講,tellg() 並未直接指示檔案大小或其以位元組為單位的精確位置。相反,它提供了一個令牌,使程式能夠重新存取文件中的相同位置。不保證令牌的值可以轉換為整數資料類型。

在基於 Unix 的系統中,tellg() 通常表示與檔案開頭的位元組偏移量。然而,在 Windows 系統上,其行為會因檔案的開啟模式而異。對於二進位文件,偏移量類似於 Unix 行為。然而,在文字模式下,tellg() 的輸出與到達給定位置所需的實際位元組數之間沒有直接關聯。

為了準確確定文件中的可讀位元組數,最可靠的方法是嘗試閱讀過程。這可以透過以下步驟來實現:

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() 的值提供實際的位元組數。

附加說明:

  1. 行 *buffer = new char[length];應避免,因為它嘗試將指標指派給字元變數。相反,請考慮將 buffer 聲明為 char** 或使用向量或字串。
  2. 程式碼末尾的循環條件 (int i = 0; i
  3. 未能處理檔案開啟錯誤(例如,將大小設為 0)是一種潛在的疏忽。

以上是為什麼tellg()報告的檔案大小不一致,如何準確地確定檔案大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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