farahm
farahm

Reputation: 1326

Using dirent.h but files are being skipped

I have several hundred images in a folder named: 1.jpg, 3.jpg, 4.jpg, 6.jpg, 8.jpg, 10.jpg, 15. jpg, .... 100.jpg, 102.jpg, 103.jpg, 113.jpg etc...

I am using dirent.h to iterate through the files, but somehow dirent.h starts at 10.jpg and the next file it delivers is suddenly 100.jpg and then 102.jpg, ... why does it skip some images?

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;

}

Upvotes: 1

Views: 140

Answers (1)

Unknown
Unknown

Reputation: 5772

You'll have to sort the files yourself if you want them in order, readdir won't do that for you. See this also: Does readdir() guarantee an order?

Upvotes: 1

Related Questions