如何在 C 中比较两条(绝对)路径(以 char* 形式给出)并检查它们是否相同

  • 本文关键字:是否 比较 路径 绝对 两条 char c
  • 更新时间 :
  • 英文 :


给定两条路径作为char*,我无法确定两条路径是否指向同一个文件。如何在 C 中实现一个独立于平台的实用程序来检查路径是否指向同一文件。

使用 strcmp 将不起作用,因为在窗口路径上可以包含 \ 或/使用ist_ino将无济于事,因为它在Windows上不起作用

    char *fileName = du->getFileName();
    char *oldFileName = m_duPtr->getFileName();
    bool isSameFile = pathCompare(fileName, oldFileName) == 0;//(strcmp(fileName, oldFileName) == 0);
    if (isSameFile){
        stat(fileName, &pBuf);
        stat(oldFileName, &pBuf2);
        if (pBuf.st_ino == pBuf2.st_ino){
            bRet = true;
        }
    }

你不能。硬链接也存在于Windows上,C标准库没有操作它们的方法。

更大问题的合理解决方案:链接到cygwin1.dll并使用st_ino方法。您从示例代码中省略了st_dev,需要将其放回原处。

虽然有一种实际的方法可以在Windows上完成此操作,但它涉及ntdll方法,我必须阅读Cygwin的代码才能了解如何做到这一点。

这些方法是 NtGetFileInformationByHandle 和 NtFsGetVolumeInformationNyHandle。有记录的 kernel32 调用声称要做同样的事情。请参阅cygwin源代码,了解为什么它们不能正常工作(有缺陷的fs驱动程序(。

最新更新