【问题标题】:How find Windows shared paths are same or different OR find folder unique id using C++ Win32如何使用 C++ Win32 查找 Windows 共享路径相同或不同或查找文件夹唯一 ID
【发布时间】:2018-04-14 09:26:27
【问题描述】:

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

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

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

  • \\anil-win10\TestFolder
  • \\10.130.63.10\TestFolder

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

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

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

我可以通过添加相同的共享文件夹。

  • \\anil-win10\TestFolder
  • \\10.130.63.10\TestFolder
  • D:/TestFolder

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

【问题讨论】:

  • 不是创建别名的唯一方法,还映射驱动器号、SUBST 驱动器、符号链接。 Look here。当心非 NTFS 文件系统。

标签: windows winapi visual-c++


【解决方案1】:

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

#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;
}

【讨论】:

    猜你喜欢
    • 2017-03-11
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2010-12-25
    • 2016-03-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-17
    相关资源
    最近更新 更多