Rumah >pembangunan bahagian belakang >C++ >Mengapa `std::fstream` Saya Gagal Mencipta Fail?
Apabila cuba memanipulasi fail menggunakan perpustakaan C IO, std::fstream menawarkan akses fail yang mudah dan keupayaan input/output . Walau bagaimanapun, menghadapi masalah dengan penciptaan fail boleh menghalang kemajuan.
Satu perangkap biasa terletak pada penggunaan bendera yang salah semasa membuka fail. Mari kita pertimbangkan coretan berikut:
<code class="cpp">std::fstream my_stream; my_stream.open("my_file_name", std::fstream::binary | std::fstream::in | std::fstream::out); if (!my_stream) std::cout << "error" << strerror(errorno);</code>
Dalam kod ini, percubaan dibuat untuk mencipta fail bernama "my_file_name" untuk menulis. Walau bagaimanapun, kemasukan std::fstream::in dalam hujah mod mempunyai akibat yang tidak diingini:
<code class="cpp">// In effect, the above code is equivalent to: my_stream.open("my_file_name", std::fstream::binary | std::fstream::in);</code>
Bendera std::fstream::in secara eksplisit menyatakan keperluan untuk fail sedia ada, yang bercanggah dengan niat untuk mencipta fail yang berpotensi tidak wujud.
Untuk membetulkan isu ini, beberapa penyelesaian tersedia:
Cukup keluarkan bendera std::fstream::in daripada hujah mod. Ini akan membenarkan strim mencipta fail jika ia tidak wujud:
<code class="cpp">my_stream.open("my_file_name", std::fstream::binary | std::fstream::out);</code>
Jika fail sudah wujud, anda mungkin mahu memotongnya dan bukannya menambahkannya. Untuk mencapai matlamat ini, tambahkan std::fstream::trunc pada hujah mod:
<code class="cpp">my_stream.open("my_file_name", std::fstream::binary | std::fstream::out | std::fstream::trunc);</code>
Memahami penggunaan bendera yang sesuai dan implikasinya adalah penting untuk menguruskan fail dengan berkesan dengan std::fstream.
Atas ialah kandungan terperinci Mengapa `std::fstream` Saya Gagal Mencipta Fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!