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() 的值提供實際的位元組數。
附加說明:
以上是為什麼tellg()報告的檔案大小不一致,如何準確地確定檔案大小?的詳細內容。更多資訊請關注PHP中文網其他相關文章!