Я пытаюсь перечислить все файлы в определенном каталоге на общем диске, используя следующий код:
#include <iostream>
#include <string>
#include "dirent.h"
int main ()
{
DIR *directoryHandle = opendir("./temp/");
if (NULL != directoryHandle)
{
dirent *entry = readdir(directoryHandle);
while (NULL != entry)
{
//skip directories and select only files (hopefully)
if ((DT_DIR != entry->d_type) && (DT_REG == entry->d_type || DT_UNKNOWN == entry->d_type))
{
std::cout << "Name: " << entry->d_name << " Type:" << std::to_string(entry->d_type) << std::endl;
}
//go to next entry
entry = readdir(directoryHandle);
}
closedir(directoryHandle);
}
return 0;
}
Проблема в том, что entry->d_type содержит DT_UNKNOWN как для каталогов, так и для файлов в каталоге ./temp/
.
Есть ли какой-либо (надежный) специфический для Linux способ попытаться прочитать каждую запись и определить, является ли она файлом или каталогом?
Вывод cat /etc/SuSE-release
:
SUSE Linux Enterprise Desktop 11 (x86_64) ВЕРСИЯ = 11 PATCHLEVEL = 1
Версия для Linux: 2.6.32.59-0.7-по умолчанию.
Тем не менее, я ожидаю, что этот код будет работать и на других платформах.
df -T
указываетnfs4
для этого диска. - person Mihai Todor   schedule 11.09.2012