确定两个目录名是否指向同一目录

eri*_*rik 2 directory winapi

我有两个包含文件夹路径的字符串.有没有办法确定他们是否以某种方式指向同一位置?考虑到不区分大小写,8.3文件名长度修改,替换等等,字符串比较似乎有点不可靠.

为了说明,我怎样才能确定这两个指向同一个地方:

String1 = "c:\Program Files\MyFolder\"
String2 = "C:\PROGRA~1\MYFOLDER"
Run Code Online (Sandbox Code Playgroud)

And*_*ers 6

以下代码应适用于文件(包括硬链接)和目录(包括联结),但两个路径都必须有效!

#include <windows.h>
#include <stdio.h>

BOOL ArePathsEqual(LPCTSTR path1,LPCTSTR path2) 
{
    BY_HANDLE_FILE_INFORMATION bhfi1,bhfi2;
    HANDLE h1, h2 = NULL;
    DWORD access = 0;
    DWORD share = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE;

    h1 = CreateFile(path1,access,share,NULL,OPEN_EXISTING,(GetFileAttributes(path1)&FILE_ATTRIBUTE_DIRECTORY)?FILE_FLAG_BACKUP_SEMANTICS:0,NULL);
    if (INVALID_HANDLE_VALUE != h1) 
    {
        if (!GetFileInformationByHandle(h1,&bhfi1)) bhfi1.dwVolumeSerialNumber = 0;
        h2 = CreateFile(path2,access,share,NULL,OPEN_EXISTING,(GetFileAttributes(path2)&FILE_ATTRIBUTE_DIRECTORY)?FILE_FLAG_BACKUP_SEMANTICS:0,NULL);
        if (!GetFileInformationByHandle(h2,&bhfi2)) bhfi2.dwVolumeSerialNumber = bhfi1.dwVolumeSerialNumber + 1;
    }
    CloseHandle(h1);
    CloseHandle(h2);
    return INVALID_HANDLE_VALUE != h1 && INVALID_HANDLE_VALUE != h2 
    && bhfi1.dwVolumeSerialNumber==bhfi2.dwVolumeSerialNumber
    && bhfi1.nFileIndexHigh==bhfi2.nFileIndexHigh
    && bhfi1.nFileIndexLow==bhfi2.nFileIndexLow ;
}

void main() 
{
    BOOL bRet = ArePathsEqual("c:\\program files","c:\\progra~1");
    printf("ArePathsEqual: %d\n",bRet);
}
Run Code Online (Sandbox Code Playgroud)