Ваш код не может скомпилироваться, как показано. Вы вызываете ANSI-версию FindFirstFile()
(в силу того, что вы передаете ему узкий строковый литерал ANSI вместо широкого строкового литерала Unicode), а std::wstring
не имеет конструктора, который принимает char[]
в качестве ввода.
Обнажая эту ошибку, вы также игнорируете поле data.dwFileAttributes
, чтобы различать файлы и подпапки, а в случае подпапок вы не проверяете содержимое data.cFileName
, чтобы игнорировать "."
и * 1009. * специальные имена папок.
Попробуйте это:
WIN32_FIND_DATAW data;
HANDLE hFind = FindFirstFileW(L"C:\\Folder\\*", &data);
if (hFind != INVALID_HANDLE_VALUE)
{
do
{
if ((data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 0)
{
// Process File Name
std::wstring ws(data.cFileName);
...
}
else
{
if ((lstrcmpW(data.cFileName, L".") != 0) &&
(lstrcmpW(data.cFileName, L"..") != 0))
{
// Process Folder Name
std::wstring ws(data.cFileName);
...
}
}
}
while (FindNextFileW(hFind, &data));
FindClose(hFind);
}