2014-02-14 102 views
1

我有一個文件夾名爲幾百圖片:1.jpg3.jpg4.jpg6.jpg8.jpg10.jpg15. jpg,... 100.jpg102.jpg103.jpg113.jpg等。 。使用dirent.h但文件被忽略

我使用dirent.h通過文件迭代,但不知何故dirent.h開始在10.jpg並把它送到下一個文件突然100.jpg然後102.jpg,...爲什麼它跳過一些圖片?

int main (int argc, const char* argv[]) 
{ 

cv::Mat image; 

DIR *dir; 
struct dirent *ent; 
if ((dir = opendir ("C:\\Users\\Faraz\\Desktop\\Project\\detecting_false_positives_stuff\\face_images\\faces\\")) != NULL) { 
    ent = readdir (dir); 
    printf ("%s\n", ent->d_name); 
    ent = readdir (dir); 
    printf ("%s\n", ent->d_name); 
    while ((ent = readdir (dir)) != NULL) { 
     printf ("%s\n", ent->d_name); 

     std::string fullPath = std::string("C:\\Users\\Faraz\\Desktop\\Project\\detecting_false_positives_stuff\\face_images\\faces\\") + ent->d_name; 

     cout<<fullPath; 

     image = cv::imread(fullPath); 

     ... 

    } 
    closedir (dir); 
} 
return 1; 

}

回答

1

你必須,如果你想他們爲了給自己的文件排序,readdir不會爲你做的。另請參閱:Does readdir() guarantee an order?

+0

噢,所以只是順序是不同的?這意味着最後我仍然會遍歷1.jpg,3.jpg等。 – farahm

+0

是的,它最終應該達到1.jpg等等。 – Unknown

+0

看起來像按字母順序*按名稱排序文件,而不是按數字排序。因此命令1.jpg,10.jpg,105.jpg,2.jpg。如果你想讓它們按照正確的詞法順序排列,則用零作爲數字前綴。 –