texto por obtener nombre fecha directorio como busqueda buscar avanzada archivos archivo c++ filesystems file-management

c++ - por - ¿Cómo obtener una lista de archivos con una extensión específica en una carpeta determinada?



obtener archivos de un directorio c# (5)

En Windows, haces algo como esto:

void listFiles( const char* path ) { struct _finddata_t dirFile; long hFile; if (( hFile = _findfirst( path, &dirFile )) != -1 ) { do { if ( !strcmp( dirFile.name, "." )) continue; if ( !strcmp( dirFile.name, ".." )) continue; if ( gIgnoreHidden ) { if ( dirFile.attrib & _A_HIDDEN ) continue; if ( dirFile.name[0] == ''.'' ) continue; } // dirFile.name is the name of the file. Do whatever string comparison // you want here. Something like: if ( strstr( dirFile.name, ".txt" )) printf( "found a .txt file: %s", dirFile.name ); } while ( _findnext( hFile, &dirFile ) == 0 ); _findclose( hFile ); } }

En Posix, como Linux u OsX:

void listFiles( const char* path ) { DIR* dirFile = opendir( path ); if ( dirFile ) { struct dirent* hFile; errno = 0; while (( hFile = readdir( dirFile )) != NULL ) { if ( !strcmp( hFile->d_name, "." )) continue; if ( !strcmp( hFile->d_name, ".." )) continue; // in linux hidden files all start with ''.'' if ( gIgnoreHidden && ( hFile->d_name[0] == ''.'' )) continue; // dirFile.name is the name of the file. Do whatever string comparison // you want here. Something like: if ( strstr( hFile->d_name, ".txt" )) printf( "found an .txt file: %s", hFile->d_name ); } closedir( dirFile ); } }

Quiero obtener los nombres de archivo de todos los archivos que tienen una extensión específica en una carpeta determinada (y recursivamente, sus subcarpetas). Es decir, el nombre del archivo (y la extensión), no la ruta completa del archivo. Esto es increíblemente simple en lenguajes como Python, pero no estoy familiarizado con los constructos para esto en C ++. ¿Cómo puede hacerse esto?



Obtenga una lista de archivos y procese cada archivo, bucleelos y almacénelos en una carpeta diferente

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){ returnFileName.push_back(filePath+fileInfo.cFileName); while (FindNextFile(hFind, &fileInfo) != 0){ returnFileName.push_back(filePath+fileInfo.cFileName); } } }

USO: puede usar de esta manera cargar todos los archivos de la carpeta y recorrerlos uno a uno

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++; }


un código C ++ 17

#include <fstream> #include <iostream> #include <experimental/filesystem> namespace fs = std::experimental::filesystem; int main() { std::string path("/your/dir/"); std::string ext(".sample"); for(auto& p: fs::recursive_directory_iterator(path) { if(p.path().extension() == ext()) std::cout << p << ''/n''; } return 0; }


#define BOOST_FILESYSTEM_VERSION 3 #define BOOST_FILESYSTEM_NO_DEPRECATED #include <boost/filesystem.hpp> namespace fs = ::boost::filesystem; // return the filenames of all files that have the specified extension // in the specified directory and all subdirectories void get_all(const fs::path& root, const string& ext, vector<fs::path>& ret) { if(!fs::exists(root) || !fs::is_directory(root)) return; fs::recursive_directory_iterator it(root); fs::recursive_directory_iterator endit; while(it != endit) { if(fs::is_regular_file(*it) && it->path().extension() == ext) ret.push_back(it->path().filename()); ++it; } }