Peningkatan::sistem file::is_symlink() tidak berfungsi

Ketika saya meluncurkan potongan kode ini, dikatakan bahwa setiap file adalah reguler, bahkan symlink :

cout<<boost::filesystem::is_symlink(boost::filesystem::status("link-name"))<<endl;

Ada yang tahu kenapa? (tidak ada peringatan atau kesalahan saat kompilasi) Tautan dibuat dengan perintah :

ln -s file-name link-name

dan perintah ls mengatakan itu adalah tautan:

ls -l link-name
lrwxrwxrwx 1 myname mygroup 8 juil. 23 14:12 link-name -> file-name

Terima kasih !

EDIT : di sisi lain, fungsi boost::filesystem::is_regular_file selalu mengembalikan nilai true.


person StormRider    schedule 23.07.2014    source sumber


Jawaban (2)


Anda harus menggunakan symlink_status(const path& p) seperti dalam dokumentasi referensi peningkatan.

file_status symlink_status(const path& p);

Pengembalian: Sama seperti status(), kecuali jika atribut menunjukkan tautan simbolis, seperti menurut ISO/IEC 9945 S_ISLNK(), kembalikan file_status(symlink_file).

person Alper    schedule 23.07.2014
comment
Memang benar, dengan symlink_status(), is_symlink() mengembalikan nilai true. Tapi di sana kita harus mengetahui status file sebelum dijalankan ... bagaimana saya bisa tahu apakah suatu file biasa atau symlink selama eksekusi? - person StormRider; 23.07.2014
comment
selalu gunakan symlink_status(), hasilnya sama seperti status() kecuali tautan simbolik. - person Alper; 23.07.2014
comment
Itu dia ! symlink_status() berfungsi. Terima kasih ! Tetapi mengapa status() tidak mengembalikan jenis file yang benar? - person StormRider; 23.07.2014
comment
Seseorang mungkin ingin mengikuti tautan simbolik dan menentukan atribut file target/nyata. Boost menyediakan 2 fungsi symlink_status() dan status() untuk menyediakan keduanya. - person Alper; 23.07.2014

Dalam kode Anda memiliki link_name, dalam sistem file Anda memiliki link-name.

person Wojtek Surowka    schedule 23.07.2014