2010-10-02 1 views
1

Хорошо, поэтому я использую mingW, а прямая структура не имеет переменных с именем d_type или stat, d_stat или dd_stat. Мне нужно знать, как я могу использовать свою прямую структуру, чтобы выяснить, есть ли у меня файл или папка. Вот мой код.Как проверить, является ли каталог файлом или папкой?

#include <sys/types.h> 
#include <sys/stat.h> 
#include <dirent.h> 
#include <errno.h> 
#include <vector> 
#include <string> 
#include <iostream> 

using namespace std; 

/*function... might want it in some class?*/ 
int getdir (string dir, vector<string> &files) 
{ 
    DIR *dp; 
    struct stat _buf; 
    struct dirent *dirp; 
    if((dp = opendir(dir.c_str())) == NULL) { 
     cout << "Error(" << errno << ") opening " << dir << endl; 
     return errno; 
    } 

    while ((dirp = readdir(dp)) != NULL) { 

     if(stat(dirp->d_name, &_buf) != 0x4) 
     files.push_back(string(dirp->d_name)); 
    } 
    closedir(dp); 
    return 0; 
} 

int main() 
{ 
    string dir = string("."); 
    vector<string> files = vector<string>(); 

    getdir(dir,files); 

    for (unsigned int i = 0;i < files.size();i++) { 
     cout << files[i] << endl; 
    } 
    return 0; 
} 
+0

Обратите внимание, что 'стат()' возвращает 0 в случае успеха и -1 в случае неудачи, а нулевое значение не сказать вам, был ли он каталогом (-1 говорит вам, что это не так). –

+0

Кроме того, ознакомьтесь с [SO 3828192] (http://stackoverflow.com/questions/3828192/checking-if-a-directory-exist-in-unix-system-call). –

ответ

5

boost::filesystem::is_directory() 

//I found it) 

//So, also you can try to call stat() function. (on Windows) 

(^_^)

 Смежные вопросы

  • Нет связанных вопросов^_^