Rumah > pembangunan bahagian belakang > C++ > Mengapakah `tellg()` Tidak Melaporkan Saiz Fail dengan Tepat dalam C ?

Mengapakah `tellg()` Tidak Melaporkan Saiz Fail dengan Tepat dalam C ?

Barbara Streisand
Lepaskan: 2024-12-02 20:56:11
asal
122 orang telah melayarinya

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

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 );
Salin selepas log masuk

Pemerhatian Lain

Selain isu tellg(), kod anda mengandungi ralat tambahan:

  1. Barisan "penampan = aksara baharu[panjang];" hendaklah "*buffer = new char[length];" untuk memperuntukkan penuding kepada tatasusunan aksara.
  2. Keadaan gelung dalam kedua untuk gelung hendaklah semasa ( file.get( penimbal[i] ) ) untuk bacaan aksara demi aksara.
  3. Pengendalian ralat harus dilaksanakan sekiranya pembukaan fail gagal.

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan