Mengapa tellg() Mengembalikan Saiz Fail yang Tidak Tepat?
Dalam konteks pengendalian fail, fungsi tellg() biasanya digunakan untuk menentukan kedudukan semasa dalam fail. Walau bagaimanapun, pelaksanaan tertentu tellg() mungkin mengembalikan nilai yang melebihi jumlah sebenar data yang dibaca daripada fail.
Memahami tellg()
Bertentangan dengan kepercayaan popular , tellg() tidak melaporkan saiz fail secara langsung. Sebaliknya, ia memberikan nilai token yang membolehkan pengguna menavigasi ke lokasi yang sama kemudian dalam fail. Tafsiran khusus nilai ini berbeza-beza merentas sistem pengendalian.
Unix lwn. Windows
Pada sistem Unix, tellg() biasanya mengembalikan offset dalam bait dari permulaan fail tersebut. Sebaliknya, pada Windows, nilai yang dikembalikan mewakili offset hanya untuk fail yang dibuka dalam mod binari. Untuk fail mod teks, tellg() boleh melaporkan nilai arbitrari yang lebih besar daripada kiraan bait sebenar.
Menentukan Saiz Fail
Untuk memastikan saiz fail dengan tepat, pertimbangkan untuk menggunakan pendekatan berikut:
#include <limits> file.ignore(std::numeric_limits<std::streamsize>::max()); std::streamsize length = file.gcount(); file.clear(); // Reset eof flag set by ignore file.seekg(0, std::ios_base::beg);
Tambahan Pertimbangan
Atas ialah kandungan terperinci Mengapakah `tellg()` Kadangkala Mengembalikan Saiz Fail yang Salah?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!