gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:27:06 25 4
gpt4 key购买 nike

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

使用 strcmp 将不起作用,因为在 Windows 上路径可以包含\或/使用 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 上也存在硬链接(hard link),C 标准库没有对其进行操作的方法。

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

虽然在 Windows 上有一种实际的方法可以实现这一点,但它涉及到 ntdll 方法,我必须阅读 Cygwin 的代码才能找出如何做到这一点。

方法是 NtGetFileInformationByHandle 和 NtFsGetVolumeInformationNyHandle。有记录的 kernel32 调用声称可以做同样的事情。请参阅 cygwin 源代码以了解它们为何无法正常工作(有问题的 fs 驱动程序)。

关于c - 如何比较 C 中的两个(绝对)路径(以 char* 形式给出)并检查它们是否相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56582169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com