2012-04-26 5 views
4

Имея несколько проблем, пытающихся придумать хороший способ иметь трассировку каталога, который будет выбирать только файлы wav и возвращать строки для этих файлов исключительно, например. просто файлы wav. Я могу остановить dirent.h, глядя в подкаталоги, я вполне уверен, что мне просто нужен оператор if, который разрешает файлы с .wav в строкеDirent.h - получить строки только для файлов с определенным расширением

До сих пор мой код выглядит так, я просто расширил несколько примеров, видел на вики-странице для заголовочного файла:

ifstream fin; 
string dir, filepath; 
DIR *dp; 
struct dirent *dirp; 
struct stat filestat; 


cout << "dir to get files of: " << flush; 

getline(cin, dir); 

dp = opendir(dir.c_str()); 

if (dp == NULL){ 

    cout << "Error(" << errno << ") opening " << dir << endl; 

    } 

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

    filepath = dir + "/" + dirp->d_name; 

    if (stat(filepath.c_str(), &filestat)) continue; 
    if (S_ISDIR(filestat.st_mode))   continue; 

    fin.open(filepath.c_str()); 

    stringVec.push_back(filepath); 

    fin.close(); 

    } 

closedir(dp); 

for(int i=0;i<stringVec.size();i++){ 
    cout << stringVec[i] << endl; 

} 

Любая помощь приветствуется, я его не очень сложно - но до сих пор я не был в состоянии понять это.

+0

Используйте http://stackoverflow.com/questions/874134/find-if-string-endswith-another-string-in-c, чтобы проверить, закончилось ли имя файла .wav – user786653

+0

Используйте 'if (! S_ISREG (filestat. st_mode)) '; ваши файлы '.wav' не являются сокетами, символами или блоками специальных устройств, FIFO и т. д. После этого или даже перед любыми проверками на основе stat проверьте, что последние 4 символа имени' .wav '. –

ответ

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