_wsplitpath_s () альтернатива для использования с длинными путями

Я анализирую пути с помощью функции библиотеки _wsplitpath_s() использовать с функциями Win32 API.

В соответствии с этот документ MSDN, длинные пути (длиннее, чем MAX_PATH символы) должны начинаться с префикса \\?\, Однако, когда я добавляю его к строке полного пути, _wsplitpath_s() не могу разобрать это правильно.

Пример кода:

std::wstring FullPath = L"\\\\?\\K:\\A Directory\\Another Directory\\File Name.After Period.extension";
std::wstring Drive, Directory, FileName, Extension;
Drive.resize        (FullPath.size());
Directory.resize    (FullPath.size());
FileName.resize     (FullPath.size());
Extension.resize    (FullPath.size());
errno_t Error = _wsplitpath_s(  FullPath.c_str(),
&Drive[0],
Drive.size(),
&Directory[0],
Directory.size(),
&FileName[0],
FileName.size(),
&Extension[0],
Extension.size());
std::wcout << L"Full path to be splitted :    " << FullPath.c_str()     << std::endl;
std::wcout << L"Drive                    :    " << Drive.c_str()        << std::endl;
std::wcout << L"Directory                :    " << Directory.c_str()    << std::endl;
std::wcout << L"File name                :    " << FileName.c_str()     << std::endl;
std::wcout << L"Extension                :    " << Extension.c_str()    << std::endl;
std::wcout << L"Error value returned     :    " << Error                << std::endl;
std::wcout << L"Did error occur?         :    " << (Error == EINVAL)    << std::endl;
std::wcout << L"Value of 'EINVAL'        :    " << EINVAL               << std::endl;

Фактический вывод кода выше:

Full path to be splitted :    \\?\K:\A Directory\Another Directory\File Name.After Period.extension
Drive                    :
Directory                :    \\?\K:\A Directory\Another Directory\
File name                :    File Name.After Period
Extension                :    .extension
Error value returned     :    0
Did error occur?         :    0
Value of 'EINVAL'        :    22

Как это работает с короткими путями:

Full path to be splitted :    K:\A Directory\Another Directory\File Name.After Period.extension
Drive                    :    K:
Directory                :    \A Directory\Another Directory\
File name                :    File Name.After Period
Extension                :    .extension

Ожидаемое поведение для длинных путей:

Full path to be splitted :    \\?\K:\A Directory\Another Directory\File Name.After Period.extension
Drive                    :    K:
Directory                :    \A Directory\Another Directory\
File name                :    File Name.After Period
Extension                :    .extension

Есть ли альтернатива _wsplitpath_s() который поддерживает соглашение об именах длинных путей?
Алгоритм STL, функция Win32 API или функция библиотеки C принимаются в указанном порядке.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]