Boost::filesystem::is_symlink() ไม่ทำงาน

เมื่อฉันเปิดตัวโค้ดนี้ มันบอกว่าทุกไฟล์เป็นแบบปกติ แม้แต่ symlink :

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

มีใครรู้บ้างว่าทำไม? (ไม่มีคำเตือนหรือข้อผิดพลาดระหว่างการคอมไพล์) ลิงก์ถูกสร้างขึ้นด้วยคำสั่ง:

ln -s file-name link-name

และคำสั่ง ls บอกว่ามันเป็นลิงค์:

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

ขอบคุณ !

แก้ไข : ในทางกลับกันฟังก์ชั่น boost::filesystem::is_regular_file จะคืนค่า true เสมอ


person StormRider    schedule 23.07.2014    source แหล่งที่มา


คำตอบ (2)


คุณควรใช้ symlink_status(const path& p) เช่นเดียวกับใน boost เอกสารอ้างอิง< /ก>.

file_status symlink_status(const path& p);

ส่งคืน: เช่นเดียวกับ status() ยกเว้นว่าหากแอตทริบิวต์ระบุลิงก์สัญลักษณ์ เหมือนกับ ISO/IEC 9945 S_ISLNK() ให้ส่งคืน file_status(symlink_file)

person Alper    schedule 23.07.2014
comment
อันที่จริงเมื่อใช้ symlink_status() is_symlink() จะคืนค่าเป็นจริง แต่เราต้องรู้สถานะของไฟล์ก่อน runnin ... ฉันจะรู้ได้อย่างไรว่าไฟล์นั้นเป็นไฟล์ปกติหรือมีการเรียกใช้ symlink ระหว่างดำเนินการ - person StormRider; 23.07.2014
comment
ใช้ symlink_status() เสมอ โดยจะส่งกลับเหมือนกับ status() ยกเว้นลิงก์สัญลักษณ์ - person Alper; 23.07.2014
comment
แค่นั้นแหละ ! symlink_status() ใช้งานได้ ขอบคุณ ! แต่เหตุใด status() จึงไม่ส่งคืนประเภทไฟล์ที่ถูกต้อง - person StormRider; 23.07.2014
comment
อาจต้องการติดตามลิงก์สัญลักษณ์และกำหนดคุณลักษณะของไฟล์เป้าหมาย/ไฟล์จริง Boost มี 2 ฟังก์ชัน symlink_status() และ status() เพื่อให้ทั้งสองฟังก์ชัน - person Alper; 23.07.2014

ในโค้ดคุณมี link_name ในระบบไฟล์คุณมี link-name

person Wojtek Surowka    schedule 23.07.2014