Mengakses mesej ralat dalam C semasa membuka fail menggunakan ifstream boleh menjadi mencabar. Untuk menangani isu ini, mari kita mendalami teknik untuk mengekstrak sebab ralat.
Cara standard untuk menyemak ralat pembukaan fail ialah:
ifstream f; f.open(fileName); if ( f.fail() ) { // I need error message here, like "File not found" etc. - // the reason of the failure }
Dalam C , apabila panggilan sistem gagal, ia mengemas kini pembolehubah global errno. Oleh itu, anda boleh mendapatkan butiran tambahan tentang kegagalan terbuka ifstream menggunakan errno:
ifstream f; f.open(fileName); if ( f.fail() ) { cerr << "Error: " << strerror(errno); }
Perhatikan bahawa errno ialah pembolehubah global. Dalam aplikasi berbilang benang, anda perlu berhati-hati. Jika panggilan sistem lain mencetuskan ralat antara pelaksanaan f.open() dan penggunaan errno, ini boleh menjejaskan ketepatan mesej ralat.
Pada POSIX- sistem yang mematuhi, errno adalah thread-local. Ini menunjukkan bahawa menetapkan errno dalam satu urutan tidak memberi kesan kepada nilainya dalam mana-mana urutan lain.
Pada asalnya, e.what() kelihatan seperti lebih C -pendekatan yang sesuai untuk mendapatkan semula maklumat ralat. Walau bagaimanapun, fungsi ini mengembalikan rentetan khusus pelaksanaan. Dalam libstdc G , rentetan ini sering memberikan sedikit maklumat bermakna tentang kegagalan.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Mendapatkan Mesej Ralat Apabila `ifstream` Gagal Membuka Fail?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!