Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Menentukan Saiz Fail dengan Tepat dalam C Daripada Menggunakan `tellg()`?

Bagaimanakah Saya Boleh Menentukan Saiz Fail dengan Tepat dalam C Daripada Menggunakan `tellg()`?

Barbara Streisand
Lepaskan: 2024-12-16 11:02:14
asal
989 orang telah melayarinya

How Can I Accurately Determine a File's Size in C   Instead of Using `tellg()`?

Fungsi Tellg() dan Saiz Fail

tellg() ialah fungsi dalam C yang digunakan untuk mendapatkan semula kedudukan semasa dalam fail. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa tellg() tidak memberikan saiz sebenar fail dalam bait. Sebaliknya, ia mengembalikan nilai token yang boleh digunakan kemudian untuk mencari kembali ke kedudukan yang sama.

Dalam kod yang disediakan, nampaknya terdapat salah faham mengenai kelakuan yang dijangkakan tellg(). Kod ini menggunakan tellg() untuk menentukan saiz fail, yang kemudiannya digunakan untuk memperuntukkan penimbal untuk menyimpan kandungan fail. Walau bagaimanapun, tellg() tidak boleh dipercayai untuk tujuan ini.

Mengikut spesifikasi bahasa C, tellg() mengembalikan nilai token yang khusus untuk pelaksanaan. Walaupun ia sering sepadan dengan ofset bait dalam sistem Unix, tingkah laku ini tidak dijamin di bawah Windows. Dalam mod teks, Windows mungkin mengembalikan nilai yang lebih besar daripada bilangan bait sebenar yang diperlukan untuk mencapai kedudukan semasa.

Untuk menentukan saiz fail dengan tepat, adalah disyorkan untuk menggunakan kaedah alternatif, seperti:

#include <limits>

...

file.ignore(std::numeric_limits<std::streamsize>::max());
std::streamsize length = file.gcount(); // Retrieve the size of the file in bytes
file.clear(); // Reset the file stream
file.seekg(0, std::ios_base::beg); // Return to the beginning of the file
Salin selepas log masuk

Selain itu, terdapat beberapa isu dalam kod yang disediakan:

  • *buffer = new char[length]; harus dibetulkan kepada buffer = new char[length];.
  • Penggunaan int untuk saiz adalah tidak sesuai; std::streamsize hendaklah digunakan sebaliknya.
  • Pengendalian ralat tidak disediakan sekiranya fail gagal dibuka.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menentukan Saiz Fail dengan Tepat dalam C Daripada Menggunakan `tellg()`?. 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