How do I get a list of files in a directory in C++?

后端 未结 13 1397
南旧
南旧 2020-11-28 23:36

How do you get a list of files within a directory so each can be processed?

相关标签:
13条回答
  • 2020-11-28 23:56

    You can use the following code for getting all files in a directory.A simple modification in the Andreas Bonini answer to remove the occurance of "." and ".."

    CString dirpath="d:\\mydir"
    DWORD errVal = ERROR_SUCCESS;
    HANDLE dir;
    WIN32_FIND_DATA file_data;
    CString  file_name,full_file_name;
    if ((dir = FindFirstFile((dirname+ "/*"), &file_data)) == INVALID_HANDLE_VALUE)
    {
        errVal=ERROR_INVALID_ACCEL_HANDLE;
        return errVal;
    }
    
    while (FindNextFile(dir, &file_data)) {
        file_name = file_data.cFileName;
        full_file_name = dirname+ file_name;
        if (strcmp(file_data.cFileName, ".") != 0 && strcmp(file_data.cFileName, "..") != 0)
        {
            m_List.AddTail(full_file_name);
        }
    }
    
    0 讨论(0)
  • 2020-11-28 23:57

    Or you do this and then read out the test.txt:

    #include <windows.h>
    
    int main() {    
    system("dir /b > test.txt");
    }
    

    The "/b" means just filenames are returned, no further info.

    0 讨论(0)
  • 2020-11-28 23:58

    Here's an example in C on Linux. That's if, you're on Linux and don't mind doing this small bit in ANSI C.

    #include <dirent.h>
    
    DIR *dpdf;
    struct dirent *epdf;
    
    dpdf = opendir("./");
    if (dpdf != NULL){
       while (epdf = readdir(dpdf)){
          printf("Filename: %s",epdf->d_name);
          // std::cout << epdf->d_name << std::endl;
       }
    }
    closedir(dpdf);
    
    0 讨论(0)
  • 2020-11-28 23:59
    void getFilesList(String filePath,String extension, vector<string> & returnFileName)
    {
        WIN32_FIND_DATA fileInfo;
        HANDLE hFind;   
        String  fullPath = filePath + extension;
        hFind = FindFirstFile(fullPath.c_str(), &fileInfo);
        if (hFind == INVALID_HANDLE_VALUE){return;} 
        else {
            return FileName.push_back(filePath+fileInfo.cFileName);
            while (FindNextFile(hFind, &fileInfo) != 0){
                return FileName.push_back(filePath+fileInfo.cFileName);}
            }
     }
    
    
     String optfileName ="";        
     String inputFolderPath =""; 
     String extension = "*.jpg*";
     getFilesList(inputFolderPath,extension,filesPaths);
     vector<string>::const_iterator it = filesPaths.begin();
     while( it != filesPaths.end())
     {
        frame = imread(*it);//read file names
                //doyourwork here ( frame );
        sprintf(buf, "%s/Out/%d.jpg", optfileName.c_str(),it->c_str());
        imwrite(buf,frame);   
        it++;
     }
    
    0 讨论(0)
  • 2020-11-29 00:02

    Solving this will require a platform specific solution. Look for opendir() on unix/linux or FindFirstFile() on Windows. Or, there are many libraries that will handle the platform specific part for you.

    0 讨论(0)
  • 2020-11-29 00:04

    Here's what I use:

    /* Returns a list of files in a directory (except the ones that begin with a dot) */
    
    void GetFilesInDirectory(std::vector<string> &out, const string &directory)
    {
    #ifdef WINDOWS
        HANDLE dir;
        WIN32_FIND_DATA file_data;
    
        if ((dir = FindFirstFile((directory + "/*").c_str(), &file_data)) == INVALID_HANDLE_VALUE)
            return; /* No files found */
    
        do {
            const string file_name = file_data.cFileName;
            const string full_file_name = directory + "/" + file_name;
            const bool is_directory = (file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != 0;
    
            if (file_name[0] == '.')
                continue;
    
            if (is_directory)
                continue;
    
            out.push_back(full_file_name);
        } while (FindNextFile(dir, &file_data));
    
        FindClose(dir);
    #else
        DIR *dir;
        class dirent *ent;
        class stat st;
    
        dir = opendir(directory);
        while ((ent = readdir(dir)) != NULL) {
            const string file_name = ent->d_name;
            const string full_file_name = directory + "/" + file_name;
    
            if (file_name[0] == '.')
                continue;
    
            if (stat(full_file_name.c_str(), &st) == -1)
                continue;
    
            const bool is_directory = (st.st_mode & S_IFDIR) != 0;
    
            if (is_directory)
                continue;
    
            out.push_back(full_file_name);
        }
        closedir(dir);
    #endif
    } // GetFilesInDirectory
    
    0 讨论(0)
提交回复
热议问题