首頁 >後端開發 >C++ >為什麼 `tellg()` 不能準確地報告 C 中的檔案大小?

為什麼 `tellg()` 不能準確地報告 C 中的檔案大小?

Barbara Streisand
Barbara Streisand原創
2024-12-02 20:56:11121瀏覽

Why Does `tellg()` Not Accurately Report File Size in C  ?

tellg() 誤解:報告檔案大小

在您的程式碼片段中,您遇到了tellg() 函數傳回值的問題大於read() 函數讀取的檔案的實際大小。這種知覺差異源自於對tellg() 目的的誤解。

Tellg 的函數

與普遍看法相反,tellg() 不提供檔案或從開頭的偏移量(以位元組為單位)。相反,它會傳回一個標記值,一個佔位符,稍後可以使用該佔位符返回到檔案中的相同位置。傳回的實際數字可能因作業系統和檔案模式而異。

實際實作

實際上,在Unix 系統上,tellg() 會傳回以位元組為單位的偏移量,而在Windows 上,它只會傳回以二進位模式開啟的檔案的偏移量。對於 Windows 上的文字模式,傳回的值可能無法準確反映到達該位置所需的位元組數。

準確的位元組計數

準確地確定需要的位元組數對於可讀取的位元組,唯一可靠的方法是執行讀取操作。這可以使用以下技術來實現:

其他觀察

除了tellg()問題之外,您的程式碼還包含其他錯誤:

  1. 行「buffer = new char[length];」應該是「*buffer = new char[length];」分配一個指向字元陣列的指標。
  2. 第二個 for 迴圈中的迴圈條件應該是 while ( file.get( buffer[i] ) ),用於逐個字元讀取。
  3. 應該實現錯誤處理,以防檔案開啟失敗。

透過解決這些問題,您的程式碼可以準確地確定檔案的大小並執行讀取操作正如預期的那樣。

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

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