Я использую следующий код для получения информации о каталоге файловой системы:
LPCTSTR pStrPath = L"D:\\1";
WIN32_FIND_DATA wfd;
HANDLE hDummy = ::FindFirstFile(pStrPath, &wfd);
if(hDummy != INVALID_HANDLE_VALUE)
{
//Use 'wfd' info
//...
::FindClose(hDummy);
}
else
{
int error = ::GetLastError();
}
Код работает просто отлично, если я не укажу корневой путь:
D:\
— код ошибки ERROR_FILE_NOT_FOUND
D:
— код ошибки ERROR_FILE_NOT_FOUND
\\SRVR-1\share
— код ошибки ERROR_BAD_NET_NAME
\\SRVR-1\share\
— код ошибки ERROR_BAD_NET_NAME
\\SRVR-1\HiddenShare$
— код ошибки ERROR_BAD_NET_NAME
Но это работает в следующих случаях:
D:\1
— Нет ошибок\\SRVR-1\share\1
— Нет ошибок\\SRVR-1\HiddenShare$\1
— Нет ошибокЕсть идеи почему?
FindFirstFile()
предназначен для использования для перечисления содержимого каталога. Как таковой, он предназначен для использования с шаблоном файла, таким как D:\*
,
Когда вы используете D:\1
вы просто используете очень строгий шаблон файла (1
) для фильтрации файлов в D:\
, но когда вы используете только D:\
или же D:
нет никакого шаблона вообще!
И то же самое верно для общих ресурсов. Обратите внимание, что \\SRV-1\share
не считается шаблоном, потому что \\SRV-1
не может считаться каталогом.
Других решений пока нет …