Windows 文件名超过 MAX_PATH(260 个字符)的 ShellExecuteW

Windows ShellExecuteW with filename that exceeds MAX_PATH (260 characters)

我很难理解是什么导致了我的问题。

我正在使用

ShellExecuteW('open', 'explorer.exe', '/select,[file_name]', None, win32con.SW_SHOW)

我想做的是打开 OS 中的文件,突出显示它,然后将文件资源管理器调到前台。这在大多数情况下工作正常,但是当我尝试打开超过 MAX_PATH 限制(260 个字符)的文件时,文件不会打开,而是将我带到 "My Files" 页面。

我试过在我的文件名的开头加上“\\?\”,因为其他 Stack Overflow 帖子说这是关于覆盖 MAX_PATH 限制的,但它没有改变了局面。

ShellExecuteW函数是否不允许超过MAX_PATH的文件?而且,如果是这样,我可以使用任何解决方法吗?

我看了一些案例,关于这个问题。查找这篇文章:Long Paths in .NET, Part 1 of 3 [Kim Hamilton]

If you prefix the file name with "\?\" and call the Unicode versions of the Windows APIs, then you can use file names up to 32K characters in length. In other words, the \?\ prefix is a way to enable long paths while working with the Windows file APIs.

和:

Long paths with the \?\ prefix can be used in most of the file-related Windows APIs, but not all Windows APIs.

我也用\?\测试了ShellExcuteW,但失败了。 与 SHOpenFolderAndSelectItems

合作良好
CoInitialize(NULL);

    LPCWSTR file_name ;//Change the path according to your needs

    PIDLIST_ABSOLUTE pidl;
    if (SUCCEEDED(SHParseDisplayName(file_name, 0, &pidl, 0, 0)))
    {
        ITEMIDLIST idNull = { 0 };
        LPCITEMIDLIST pidlNull[1] = { &idNull };
        SHOpenFolderAndSelectItems(pidl, 1, pidlNull, 0);
        ILFree(pidl);
    }

注意:在使用SHOpenFolderAndSelectItems之前必须调用CoInitialize或CoInitializeEx。不这样做会导致 SHOpenFolderAndSelectItems 失败。