Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk membaca kandungan fail sebagai tatasusunan aksara dalam C menggunakan ifstream::read() dan istreambuf_iterator?

Bagaimana untuk membaca kandungan fail sebagai tatasusunan aksara dalam C menggunakan ifstream::read() dan istreambuf_iterator?

DDD
DDDasal
2024-11-01 00:57:02453semak imbas

How to read file contents as a character array in C   using ifstream::read() and istreambuf_iterator?

Cara Membaca Kandungan Fail sebagai Tatasusunan Aksara dalam C

Latar Belakang

Soalan ini bertanya bagaimana untuk mengisi penimbal tatasusunan aksara dengan bait fail bernama inputFile. Pengguna telah menghadapi kesukaran dengan pendekatan lain yang dicadangkan yang menggunakan getline() dan bukannya ifstream::read().

Penyelesaian

Terdapat beberapa pendekatan untuk menangani perkara ini tugasan:

Menggunakan ifstream::read()

Kaedah ini melibatkan:

  1. Membuka Fail: Gunakan std::ifstream untuk membuka fail dalam mod binari untuk mengelakkan terjemahan aksara.
  2. Menentukan Saiz Fail: Gunakan seekg() dan tellg() untuk mendapatkan panjang fail.
  3. Membaca Data: Panggil baca() untuk membaca kandungan fail ke dalam penimbal, memastikan saiz penimbal mencukupi.

Kod Contoh:

<code class="cpp">// Open file in binary mode
std::ifstream infile("C:\MyFile.csv", std::ios_base::binary);

// Get file length
infile.seekg(0, std::ios::end);
size_t length = infile.tellg();
infile.seekg(0, std::ios::beg);

// Read file
infile.read(buffer, length);</code>

Menggunakan istreambuf_iterator

Pendekatan ini lebih moden dan menggunakan iterator untuk membaca fail:

  1. Buat Istreambuf_iterator: Berikan std::istreambuf_iterator(infile) kepada start iterator dan std::istreambuf_iterator() kepada end iterator.
  2. Gunakan Vektor untuk Menyimpan Aksara Cipta vektor std::vector dan tolak semua aksara daripada lelaran mula hingga akhir ke dalam vektor.
  3. Salin Vektor ke Tatasusunan: Berikan data vektor kepada penimbal menggunakan std::copy.

Kod Contoh:

<code class="cpp">// Create iterators
std::istreambuf_iterator<char> begin(infile);
std::istreambuf_iterator<char> end;

// Create vector
std::vector<char> contents(begin, end);

// Copy vector to array
std::copy(contents.begin(), contents.end(), buffer);</code>

Pertimbangan

  • Had Saiz Fail: ifstream:: read() boleh melimpahi penimbal jika saiz fail melebihi saiznya. Pertimbangkan untuk menggunakan bacaan buffer atau penimbal boleh ubah saiz sebaliknya.
  • Pengendalian Ralat: Semak kemungkinan ralat baca menggunakan infile.fail() atau infile.eof() selepas percubaan membaca.
  • Mod Perduaan: Jika fail mengandungi aksara bukan ASCII, bukanya dalam mod binari untuk mengekalkan pengekodan asalnya.

Atas ialah kandungan terperinci Bagaimana untuk membaca kandungan fail sebagai tatasusunan aksara dalam C menggunakan ifstream::read() dan istreambuf_iterator?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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