Rumah >pembangunan bahagian belakang >C++ >Mengapa `std::fstream` Saya Gagal Mencipta Fail?

Mengapa `std::fstream` Saya Gagal Mencipta Fail?

Barbara Streisand
Barbara Streisandasal
2024-10-29 23:28:29668semak imbas

 Why Does My `std::fstream` Fail to Create a File?

Pemerhatian Penciptaan Fail dalam std::fstream

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:

Penyelesaian 1: Alih keluar std::fstream::in

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>

Penyelesaian 2: Tentukan std::fstream::out dan std::fstream::trunc

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!

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