Поиск файлов и каталогов не видит AppData
Я написал функцию для поиска каталогов, но он не отображал мне папку AppData, тогда я попробовал вывести её как скрытую и системную но ничего не вышло. Почему я не могу её отобразить?
#include <iostream>
#include <windows.h>
bool find(std::string path)
{
std::string ppath = path + "\\*";
WIN32_FIND_DATAA winFD;
HANDLE hFile = FindFirstFileA(ppath.c_str(), &winFD);
if (hFile != INVALID_HANDLE_VALUE)
{
while (FindNextFileA(hFile, &winFD))
{
if (winFD.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
std::cout << "DIRECTORY: " << path + "\\" + winFD.cFileName << std::endl;
}
if (winFD.dwFileAttributes == FILE_ATTRIBUTE_HIDDEN)
{
std::cout << "HIDDEN: " << path + "\\" + winFD.cFileName << std::endl;
}
if (winFD.dwFileAttributes == FILE_ATTRIBUTE_SYSTEM)
{
std::cout << "SYSTEM: " << path + "\\" + winFD.cFileName << std::endl;
}
}
}
FindClose(hFile);
return 0;
}
int main()
{
find("C:\\Users\\User");
}
Ответы (1 шт):
Автор решения: Fat-Zer
→ Ссылка
dwFileAttributes в WIN32_FIND_DATAA — это битовая маска. т.е. если, например, каталог является скрытым и системным, то его значение будет побитовой дизъюнкцией соответствующих констант:
FILE_ATTRIBUTE_DIRECTORY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM
Соответственно и проверять это значение нужно с помощью побитового И:
if (winFD.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
std::cout << "DIRECTORY: " << path + "\\" + winFD.cFileName;
}
if (winFD.dwFileAttributes & FILE_ATTRIBUTE_HIDDEN) {
std::cout << "[hidden]";
}
std::cout << std::endl;