【问题标题】:Check path equivalence using glib使用 glib 检查路径等效性
【发布时间】:2013-08-21 09:31:08
【问题描述】:

我需要使用 glib 检查两个文件路径的等价性。很久以前,我通过缩减路径使用 Qt 做到了这一点。但我在 glib 中找不到类似的工具。 有人可以建议这样做的常用方法吗?

谢谢

【问题讨论】:

  • 你指的是什么类型的等价?具体来说,符号链接应该如何处理?
  • 例如/home/user/file /home/user/dir/../file和file是一样的(如果$PWD=/home/user)

标签: c string path filepath glib


【解决方案1】:

对于解决... 使用的“简单”规范化,只需使用GIO API 的g_file_new_for_path() 函数创建两个GFile 对象。然后使用g_file_equal()比较两个文件。

请注意,这依赖于 GIO 在您创建 GFile 对象时对路径进行简单规范化;它不会解析符号链接。文档指出:

使用GFile 作为标识符与使用路径具有相同的弱点,因为同一文件可能有多个别名。例如,硬链接或软链接可能会导致两个不同的GFiles 引用同一个文件。别名的其他可能原因是:不区分大小写的文件系统、FAT/NTFS 上的短名称和长名称,或 Linux 中的绑定挂载。如果要检查两个GFiles 是否指向同一个文件,可以查询G_FILE_ATTRIBUTE_ID_FILE 属性。请注意,GFile 对传入的路径名进行了一些简单的规范化,因此在创建时使用的路径字符串中的细微差异(重复的斜杠、路径末尾的斜杠、“.”或“..”路径段等)不会创建不同的GFiles。

所以,你可以分两步走:

  1. g_file_equal() 联系。如果它显示true,那么您就完成了。
  2. 否则查询G_FILE_ATTRIBUTE_ID_FILE 属性并比较它们。

【讨论】:

    猜你喜欢
    • 2011-09-06
    • 2012-09-11
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2013-11-23
    • 2013-06-18
    • 1970-01-01
    相关资源
    最近更新 更多