tellg() Pelaporan Fungsi Saiz Fail Tidak Konsisten
Dalam percubaan untuk membaca fail ke dalam penimbal, pengguna mungkin menghadapi keputusan yang salah apabila menggunakan fungsi tellg(). Tidak seperti jangkaan, tellg() melaporkan nilai token dan bukannya saiz fail sebenar atau ofset bait. Percanggahan ini boleh dikaitkan dengan tujuan fungsi yang dimaksudkan.
Secara teknikal, tellg() tidak secara langsung menunjukkan saiz fail atau kedudukan tepatnya dalam bait. Sebaliknya, ia menyediakan token yang membolehkan program untuk melawat semula lokasi yang sama dalam fail. Nilai token tidak dijamin boleh ditukar kepada jenis data integral.
Dalam sistem berasaskan Unix, tellg() secara amnya mewakili ofset bait dari permulaan fail. Pada sistem Windows, bagaimanapun, tingkah lakunya berbeza berdasarkan mod terbuka fail. Untuk fail binari, offset menyerupai tingkah laku Unix. Walau bagaimanapun, dalam mod teks, tiada korelasi langsung antara output tellg() dan bilangan bait sebenar yang diperlukan untuk mencapai kedudukan tertentu.
Untuk menentukan dengan tepat bilangan bait yang boleh dibaca dalam fail, pendekatan yang paling boleh dipercayai ialah mencuba proses membaca. Ini boleh dicapai menggunakan langkah berikut:
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 );
Di sini, abaikan digunakan untuk membaca sehingga akhir fail. Nilai gcount() kemudiannya memberikan bilangan bait sebenar.
Nota Tambahan:
Atas ialah kandungan terperinci Mengapa tellg() Melaporkan Saiz Fail Tidak Konsisten, dan Bagaimana Saya Boleh Menentukan Saiz Fail Dengan Tepat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!