API CreateDirectoyW (...) завершается ошибкой с кодом ошибки = 123 ( - PullRequest
1 голос
/ 08 апреля 2011

Я хочу создать каталог с относительно длинным именем (около> 260 символов), поэтому я использую API CreateDirectoryW (...) в соответствии с документацией MSDN.но он не работает для каталога длинных имен (> 260) .. кто-нибудь может сказать мне решение ???

Я использую Visual Studio 2008 на Microsoft Windows 2003 Server

например

CString s = L"\\\\?\\C:\\dir1\\dir2\\<long name > 260 char>";
bool b = CreateDirectoryW(s, NULL);

Фактический путь:

CString s = L"\\?\C:\data\temp\abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyzabcdefghijklmnopq1234567890";

1 Ответ

1 голос
/ 08 апреля 2011

Я считаю, что ограничение для одного компонента пути по-прежнему составляет 255 символов. Все, что позволяет \\?\, - это составить путь, длина которого превышает 260 символов.

Из Именование файлов, путей и пространств имен :

Windows API имеет много функций, которые также имеют версии Unicode, чтобы разрешить путь расширенной длины для максимальной общей длины пути 32 767 символов. Этот тип пути состоит из компонентов, разделенных обратной косой чертой, каждая из которых соответствует значению, возвращенному в параметре lpMaximumComponentLength функции GetVolumeInformation (обычно это значение составляет 255 символов).


Также, для справки, ошибка 123 определена в winerror.h как ERROR_INVALID_NAME

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...