Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wyszukiwanie pliku na dysku

Ostatnio zmodyfikowano 2016-12-21 01:35
Autor Wiadomość
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 ?
P-155152
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ć.
P-155170
Gibas11
» 2016-12-18 22:59:11
C/C++
try {
    // Otwieranie ścieżki (listowanie tego co ma w środku)
} 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
P-155171
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

C/C++
void plainListTree( boost::filesystem::path path ) // 1.
{
    dump( path, 0 );
   
    boost::filesystem::recursive_directory_iterator it = createRIterator( path );
    boost::filesystem::recursive_directory_iterator end;
   
    while( it != end ) // 2.
    {
        dump( * it, it.level() ); // 3.
       
        if( boost::filesystem::is_directory( * it ) && boost::filesystem::is_symlink( * it ) ) // 4.
             it.no_push();
       
        try
        {
            ++it; // 5.
        }
        catch( std::exception & ex )
        {
            std::cout << ex.what() << std::endl;
            it.no_push(); // 6.
            try { ++it; } catch(...) { std::cout << "!!" << std::endl; return; } // 7.
        }
    }
}

i chcę tą funkcję dodać do mojego programiku :

C/C++
#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...
P-155173
piotrw97
Temat założony przez niniejszego użytkownika
» 2016-12-19 21:59:05
Ktoś coś ? :c
P-155201
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
:
C/C++
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();
    }
}
C/C++
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;
    }
}
P-155205
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 :)
P-155229
1 2 3 « 4 »
Poprzednia strona Strona 4 z 4