我需要使用 glib 检查两个文件路径的等效性。很久以前,我通过缩减路径使用 Qt 做到了这一点。但我在 glib 中找不到类似的工具。有人可以建议这样做的常用方法吗?
谢谢
对于解决.
and使用的“简单”规范化,只需使用GIO API 的函数..
创建两个GFile
对象。然后使用 . 比较两个文件。g_file_new_for_path()
g_file_equal()
请注意,这依赖于 GIO 在您创建GFile
对象时对路径进行简单的规范化;它不会解析符号链接。该文档指出:
使用
GFile
作为标识符与使用路径具有相同的弱点,因为同一文件可能有多个别名。例如,硬链接或软链接可能会导致两个不同GFile
的 s 引用同一个文件。别名的其他可能原因是:不区分大小写的文件系统、FAT/NTFS 上的短名称和长名称,或 Linux 中的绑定挂载。如果要检查两个GFile
s 是否指向同一个文件,可以查询G_FILE_ATTRIBUTE_ID_FILE
属性。请注意,GFile
对传入的路径名进行了一些微不足道的规范化,因此在创建时使用的路径字符串中的微不足道的差异(重复的斜杠、路径末尾的斜杠、“.”或“..”路径段等)不会创建不同GFile
的 s .
所以,你可以做一个两步的方法:
g_file_equal()
。如果它说true
,你就完成了。G_FILE_ATTRIBUTE_ID_FILE
属性并比较它们。