[C++] Wyświetlanie wybranych plików w oknie dialogowym
Ostatnio zmodyfikowano 2016-12-15 21:54
marianekA Temat założony przez niniejszego użytkownika |
[C++] Wyświetlanie wybranych plików w oknie dialogowym » 2016-12-13 19:37:01 Poniższa funkcja wczytuje wszystkie pliki z bieżącego katalogu. Chcę by wczytywała tylko pliki graficzne. Z jednym rozszerzeniem np. "*.jpg" jest OK, wstyd się przyznać ale nie wiem jak wstawić ich kilka. int id = 0; string dir[ 99 ];
struct _finddata_t c_file; intptr_t hFile;
if(( hFile = _findfirst( "*.*", & c_file ) ) == - 1L ) printf( "No *.c files in current directory!\n" ); else { while( _findnext( hFile, & c_file ) == 0 ) { char buffer[ 30 ]; ++id; dir[ id ] = c_file.name; cout << id << endl; } _findclose( hFile ); }
|
|
Monika90 |
» 2016-12-13 20:06:52 Trzeba samemu sprawdzać rozszerzenie pliku. No i w C++ masz wektor i filesystem i w ogóle #include <iostream> #include <iterator> #include <algorithm> #include <boost/filesystem.hpp> namespace fs = boost::filesystem;
int main() { auto is_image =[]( const auto & entry ) { const char * const images[] = { ".jpg", ".jpeg", ".bmp", ".png" }; return std::find( std::begin( images ), std::end( images ), entry.path().extension() ) != std::end( images ); }; for( const auto & entry: fs::directory_iterator( "c:/images" ) ) { if( !is_directory( entry ) && is_image( entry ) ) std::cout << entry << std::endl; } }
|
|
marianekA Temat założony przez niniejszego użytkownika |
» 2016-12-13 20:22:54 Pani Moniko, chodziło mi tylko o to czy w miejscu hFile = _findfirst( "*.*", & c_file ) ); można użyć tylko jednego flltra (tak to się pewnie nazywa) czy można też kilka. |
|
Monika90 |
» 2016-12-13 20:35:00 Tam można użyć gwiazdek i znaków zapytania jak w poleceniu dir, więc niewiele da się z tym zrobić. Dlatego trzeba ręcznie z nazwy wydobyć rozszerzenie i porównać z wszystkimi interesującymi przypadkami. |
|
marianekA Temat założony przez niniejszego użytkownika |
» 2016-12-13 20:38:55 Rozumiem... znaczy się nie da się tak prosto jak myślałem. Pozostaje jedynie wczytanie wszystkich i za radą sprawdzanie. Dziękuję za zainteresowanie. |
|
Monika90 |
» 2016-12-13 20:44:49 W c++ są też wyrażenia regularne, można je wykorzystać do sprawdzenia czy nazwa pliku kończy się interesującym nas rozszerzeniem, to rozwiąże problem z małymi i dużymi literami w rozszerzeniu pliku. |
|
marianekA Temat założony przez niniejszego użytkownika |
» 2016-12-15 21:54:55 Za radą Moniki zrobiłem tak i jest OK int id = 0; string dir[ 99 ]; string ab = "", plik = "";
struct _finddata_t c_file; intptr_t hFile; hFile = _findfirst( "*.*", & c_file ); while( _findnext( hFile, & c_file ) == 0 ) { plik = c_file.name; if( plik.size() > 4 ) ab = plik.substr( plik.size() - 3, 3 ); if( ab == "jpg" || ab == "JPG" || ab == "png" || ab == "PNG" || ab == "pcx" || ab == "PCX" || ab == "bmp" || ab == "BMP" ) ++id, dir[ id ] = plik; } _findclose( hFile );
|
|
« 1 » |