如何查找Windows共享路径相同或不同或使用C ++ Win32查找文件夹唯一ID

时间:2018-04-14 09:26:27

标签: windows winapi visual-c++

我的Windows机器上有一个共享文件夹(TestFolder)。

  • 文件夹的完整路径: D:/ TestFolder
  • 机器名称: anil-win10
  • 机器IP: 10.130.63.10

案例1: 我让我的C ++应用程序在另一台机器上运行,它包含一个网络路径列表。 我可以在列表中添加以下两条路径。

  • \\阿尼尔-win10 \ TestFolder
  • \\ 10.130.63.10 \ TestFolder

我想知道列表是否有重复项并删除重复项。

如何使用C / C ++ Win32 API了解?

案例2: 我的C ++应用程序在同一台机器上运行。

我可以通过。

添加相同的共享文件夹
  • \\阿尼尔-win10 \ TestFolder
  • \\ 10.130.63.10 \ TestFolder
  • d:/ TestFolder

实际上,所有3条路径都指向同一个位置,这里我也想删除重复的路径。寻找相同的C / C ++ Win32解决方案。

1 个答案:

答案 0 :(得分:0)

根据汉斯的建议,这是解决方案。

#include "windows.h"

long long GetFolderSystemId(const WCHAR* path)
{
    ULONG id = 0;

    HANDLE hFile = CreateFileW(path,
        GENERIC_READ,
        FILE_SHARE_READ,
        0,
        OPEN_EXISTING,
        FILE_FLAG_BACKUP_SEMANTICS,
        NULL);

    if (INVALID_HANDLE_VALUE != hFile)
    {
        BY_HANDLE_FILE_INFORMATION fileInfo;
        BOOL result = GetFileInformationByHandle(hFile, &fileInfo);

        if (result)
        {
            id = ((ULONG)(fileInfo.nFileIndexHigh << 32) | (ULONG)fileInfo.nFileIndexLow);
        }

       CloseHandle(hFile);
    }
    return id;
}

int main()
{

    long long id1 = GetFolderSystemId(L"\\\\anikumar-win7\\Shared\\Archives\\Business Jobs_");
    long long id2 = GetFolderSystemId(L"\\\\10.110.196.28\\Shared\\Archives\\Business Jobs_");

    if (id1 == id2)
        std::cout << "location are same" << std::endl;
    else
        std::cout << "location are not same" << std::endl;

    return 0;
}