Wyszukiwanie pliku na dysku
Ostatnio zmodyfikowano 2016-12-21 01:35
piotrw97 Temat założony przez niniejszego użytkownika |
» 2016-12-18 19:51:55 Okay odkryłem że w ogóle nie przeszukuje dysku C: Przykładowo utworzyłem folder na dysku c i w nim pik tekstowy i niestety program zwraca pustą wartość po sekundzie. Na dysku D normalnie działa wyszukiwanie. Co może być przyczyną takiego problemu ? |
|
piotrw97 Temat założony przez niniejszego użytkownika |
» 2016-12-18 22:47:57 Co do tej odmowy dostępu : http://www.cplusplus.com/forum/windows/99515/
Ale nie wiem jak wprowadzić to w mój kod. Może być nawet pominięcie tych katalogów których nie mogę odczytać.
|
|
Gibas11 |
» 2016-12-18 22:59:11 try { } catch( std::exception & ex ) { std::cout << "Ajć, chyba tu nie zajrzę. ;-;\nWhy? – " << ex.what() << std::endl; }
Tak jak opisane to jest u ciebie w linku. :P |
|
piotrw97 Temat założony przez niniejszego użytkownika |
» 2016-12-18 23:54:01 No ok, ale chodzi mi o to żeby szukało pliku, a gdy nie może się dostać to żeby pomijało ten katalog i szukało dalej. Tutaj jest ta funkcja void plainListTree( boost::filesystem::path path ) { dump( path, 0 ); boost::filesystem::recursive_directory_iterator it = createRIterator( path ); boost::filesystem::recursive_directory_iterator end; while( it != end ) { dump( * it, it.level() ); if( boost::filesystem::is_directory( * it ) && boost::filesystem::is_symlink( * it ) ) it.no_push(); try { ++it; } catch( std::exception & ex ) { std::cout << ex.what() << std::endl; it.no_push(); try { ++it; } catch(...) { std::cout << "!!" << std::endl; return; } } } }
i chcę tą funkcję dodać do mojego programiku : #include <boost/optional.hpp> #include <boost/filesystem.hpp> #include <iostream> using namespace std; using namespace boost; using namespace boost::filesystem;
optional < path > find_file( const path & dir_path, const path & file_name ) { const recursive_directory_iterator end; const auto it = find_if( recursive_directory_iterator( dir_path ), end, [ & file_name ]( const directory_entry & e ) { return e.path().filename() == file_name; } ); return it == end ? optional < path >() : it->path(); }
int main() { const path myPath = L"D:"; const path myFile = L"test.txt"; wcout << find_file( myPath, myFile ).get_value_or( "not found" ) << endl; }
createRIterator was not declared in this scope| dump was not declared in this scope| Jeżeli to po prostu wstawię takie errory kompilacji mam... |
|
piotrw97 Temat założony przez niniejszego użytkownika |
» 2016-12-19 21:59:05 Ktoś coś ? :c |
|
jankowalski25 |
» 2016-12-19 22:27:30 createRIterator was not declared in this scope| dump was not declared in this scope| |
Na stronie http://thisthread.blogspot.com/2011/07/using-recursivedirectoryiterator.html znalazłem funkcję createRIterator oraz dump : boost::filesystem::recursive_directory_iterator createRIterator( boost::filesystem::path path ) { try { return boost::filesystem::recursive_directory_iterator( path ); } catch( boost::filesystem::filesystem_error & fex ) { std::cout << fex.what() << std::endl; return boost::filesystem::recursive_directory_iterator(); } } |
void dump( boost::filesystem::path path, int level ) { try { std::cout <<( boost::filesystem::is_directory( path ) ? 'D' : ' ' ) << ' '; std::cout <<( boost::filesystem::is_symlink( path ) ? 'L' : ' ' ) << ' '; for( int i = 0; i < level; ++i ) std::cout << ' '; std::cout << path.filename() << std::endl; } catch( boost::filesystem::filesystem_error & fex ) { std::cout << fex.what() << std::endl; } } |
|
|
piotrw97 Temat założony przez niniejszego użytkownika |
» 2016-12-21 01:35:42 No dobra. Dzięki wszystkim za pomoc, dzięki wam jestem bogatszy w nowe umiejętności :) |
|
1 2 3 « 4 » |