2013-08-21 34 views
0

我需要使用glib檢查兩個文件路徑的等價性。我很久以前通過減少路徑與Qt做到了。但我無法在glib中找到類似的樂器。 有人可以建議通用的方式來做到這一點?使用glib檢查路徑等價性

感謝

+0

你是指什麼樣的等同性,在這裏?具體而言,應如何處理符號鏈接? – unwind

+0

例如/ home/user/file /home/user/dir/../file和file是相同的(如果$ PWD =/home/user) – shved

回答

1

對於只是「簡單」的標準化解析使用...,使用GIO API的g_file_new_for_path()函數只是創建兩個GFile對象。然後使用g_file_equal()比較這兩個文件。

請注意,這依賴於GIO在創建GFile對象時對路徑進行簡單的標準化;它不會解析符號鏈接。文檔狀態:

使用GFile作爲標識符具有與使用在該路徑可能存在對同一文件多個別名相同的弱點。例如,硬鏈接或軟鏈接可能會導致兩個不同的GFile引用同一個文件。別名的其他可能原因是:不區分大小寫的文件系統,FAT/NTFS上的短名和長名,或Linux中的綁定掛載。如果您想檢查兩個GFile是否指向同一個文件,您可以查詢G_FILE_ATTRIBUTE_ID_FILE屬性。請注意,GFile會對傳入的路徑名進行一些簡單的規範化處理,以便在創建時使用的路徑字符串(重複的斜線,路徑末尾的斜槓,「。」或「..」路徑段等)不會產生不同的差別GFile s。

所以,你可以做一個兩步走的方法:

  1. 請與g_file_equal()。如果它說true,你就完成了。
  2. 否則查詢G_FILE_ATTRIBUTE_ID_FILE屬性並進行比較。