Я работаю в независимом от ОС файловом менеджере, и у меня возникла проблема с правильным определением, является ли файл каталогом или нет в Windows.Структура dirent
в окнах, похоже, не имеет поля DT_DIR
, поэтому я использую:
file_attributes=GetFileAttributes(ep->d_name);
if(file_attributes & FILE_ATTRIBUTE_DIRECTORY)files_list[i].is_dir=1;
else files_list[i].is_dir=0;
Однако это не всегда точно, так как некоторые файлы помечаются как каталоги (длянапример, pagefile.sys).Кроме того, GetFileAttributes
довольно медленный, если у вас много файлов.
У меня также есть функция:
int does_dir_exist(char *path)
{
DIR *dp_test;
dp_test = opendir(path);
if(dp_test)
{
return 1;
closedir(dp_test);
}
return 0;
}
Но это довольно медленно (не будет хорошей идеейчтобы сделать это на 10000 файлов).
Конечно, я могу комбинировать оба, что было бы довольно быстро, но есть ли лучший способ?
PS По какой-то причине не могу отформатировать кодправильно для второй функции.