GetShortPathName失败,网络驱动器上出现中文文件夹

时间:2018-11-03 04:42:20

标签: c++ c winapi window

我想在具有中文文件夹名称的网络驱动器F:\上使用功能GetShortPathName获得短路径名称。当我从该文件夹运行EXE文件时,我看不到它能够获取短路径名。当我从C:\驱动器执行此操作时,一切正常。

这是我的代码:

#include"stdafx.h"
#include<windows.h>
#include<tchar.h>
#include<stdio.h>
#include <iostream>

using namespace std;
#define BUFSIZE 4096


bool GetIsCaseCorrect(const WCHAR* fileName)
{
    bool result = false;
    // Correct case by converting to short path and back to long
    WCHAR shortFileName[_MAX_PATH];
    if (GetShortPathName(fileName, shortFileName, _MAX_PATH) != 0)
    {
        wchar_t correctFileName[_MAX_PATH];
        wcout << "ShortFile " << shortFileName;
        GetLongPathName(shortFileName, correctFileName, _MAX_PATH);
        result = wcscmp(fileName, correctFileName) != 0;
    }
    return result;
}

int main() {
    bool ret;
    HMODULE hModule = GetModuleHandleW(NULL);
    WCHAR path[MAX_PATH];
    GetModuleFileNameW(hModule, path, MAX_PATH);

    ret = GetIsCaseCorrect(path);
    getchar();
}

如果运行此程序,则短路径不会显示在文件夹为中文的非系统驱动器上。

我的Windows操作系统是Windows 7。

1 个答案:

答案 0 :(得分:0)

据我所知,Windows 7计算机默认使用SMB 2.0。 SMB 3.0更好地支持GetShortPathNameW方法。

您可以按照下面的文档使用Win7启用SMB 3.0。

https://support.microsoft.com/en-us/help/2696547/how-to-detect-enable-and-disable-smbv1-smbv2-and-smbv3-in-windows-and?wa=wsignin1.0%3Fwa%3Dwsignin1.0

或者您可以按照以下文档检查Disable8dot3的音量状态。

https://blogs.msdn.microsoft.com/winsdk/2013/10/09/getshortpathname-doesnt-return-short-path-name/

最好的问候,

毕男爵