Salah Tanggapan Tellg(): Melaporkan Saiz Fail
Dalam coretan kod anda, anda menghadapi masalah apabila fungsi tellg() mengembalikan nilai lebih besar daripada saiz sebenar fail yang dibaca oleh fungsi read(). Percanggahan yang dirasakan ini timbul daripada salah faham tujuan tellg().
Fungsi Tellg
Bertentangan dengan kepercayaan popular, tellg() tidak memberikan saiz fail atau offset dari awal dalam bait. Sebaliknya, ia mengembalikan nilai token, pemegang tempat yang boleh digunakan kemudian untuk kembali ke kedudukan yang sama dalam fail. Nombor sebenar yang dikembalikan boleh berbeza-beza bergantung pada sistem pengendalian dan mod fail.
Pelaksanaan Praktikal
Dalam amalan, pada sistem Unix, tellg() mengembalikan offset dalam bait , manakala pada Windows, ia mengembalikan offset hanya untuk fail yang dibuka dalam mod binari. Untuk mod teks pada Windows, nilai yang dikembalikan mungkin tidak menggambarkan dengan tepat bilangan bait yang diperlukan untuk mencapai kedudukan tersebut.
Pengiraan Bait Tepat
Untuk menentukan bilangan bait dengan tepat bait yang boleh dibaca, satu-satunya kaedah yang boleh dipercayai ialah melakukan operasi baca. Ini boleh dicapai menggunakan teknik seperti berikut:
#include <limits> 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 );
Pemerhatian Lain
Selain isu tellg(), kod anda mengandungi ralat tambahan:
Dengan menangani isu ini, kod anda boleh menentukan saiz fail dengan tepat fail dan lakukan operasi baca seperti yang dimaksudkan.
Atas ialah kandungan terperinci Mengapakah `tellg()` Tidak Melaporkan Saiz Fail dengan Tepat dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!