Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Membaca Keseluruhan Fail menjadi Rentetan dengan Cekap dalam C?

Bagaimana untuk Membaca Keseluruhan Fail menjadi Rentetan dengan Cekap dalam C?

Susan Sarandon
Susan Sarandonasal
2024-10-30 11:17:02528semak imbas

How to Read an Entire File into a String Efficiently in C  ?

Membaca Kandungan Fail ke dalam Rentetan dalam C dengan Cekap

Sama seperti bahasa skrip seperti Perl, adalah berfaedah untuk dapat mendapatkan semula kandungannya daripada keseluruhan fail dan simpannya dalam pembolehubah tunggal dalam C . Ini boleh memudahkan kod dan meningkatkan prestasi. Dalam siaran ini, kami akan meneroka pendekatan yang paling cekap untuk mencapai objektif ini.

Kaedah tradisional dalam C ialah menggunakan fungsi std::ifstream dan std::getline(). Walau bagaimanapun, ini memerlukan membaca fail baris demi baris secara berulang, yang boleh menjadi tidak cekap untuk fail besar.

Penyelesaian yang lebih cekap ialah menggunakan kelas std::istreambuf_iterator. Kelas ini menyediakan antara muka lelaran ke atas kandungan strim, membolehkan kami membaca keseluruhan strim ke dalam rentetan dalam satu operasi.

Berikut ialah contoh kod yang menunjukkan pendekatan ini:

<code class="cpp">#include <fstream>
#include <string>

int main(int argc, char** argv) {
  std::ifstream ifs("myfile.txt");
  std::string content((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));
  return 0;
}</code>

Dalam kod ini, pembolehubah kandungan dimulakan dengan kandungan fail "myfile.txt." Ungkapan (std::istreambuf_iterator(ifs)) mencipta lelaran input yang membaca kandungan fail, manakala ungkapan (std::istreambuf_iterator()) mencipta lelaran tamat untuk menandakan akhir fail. Fungsi assign kemudiannya dipanggil untuk menyalin kandungan iterator input ke rentetan kandungan.

Sebagai alternatif, anda boleh terus menggunakan kaedah content.assign tanpa membuat pembolehubah rentetan sementara, seperti yang ditunjukkan di bawah:

<code class="cpp">std::ifstream ifs("myfile.txt");
std::string content;
content.assign((std::istreambuf_iterator<char>(ifs)), (std::istreambuf_iterator<char>()));</code>

Pendekatan yang dioptimumkan ini mengelakkan overhed membaca secara berulang fail baris demi baris, menjadikannya lebih cekap dengan ketara, terutamanya untuk fail besar.

Atas ialah kandungan terperinci Bagaimana untuk Membaca Keseluruhan Fail menjadi Rentetan dengan Cekap dalam C?. 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