Hallo,
ich habe mit der Hilfe von Boost-Libraries ein Filesearch - Programm erstellt.
Das ganze soll dann später Plattformunabhängig laufen, deswegen auch kein Winapi.
Funktioniert übrigens auch sehr gut, mit nur einem Problem:
Wenn vom System der Zugriff auf bestimmte Ordner verweigert wird, bekommt man eine Exception reingeballert und das Programm terminiert!
Hier der Code:
Hier der Catch:
In einem anderem Forum wurde bei einem ähnlichem Thema dazu geraten, entweder die Exception zu fangen und zu ignorieren oder eine non-throwing Funktion zu verwenden oder eben die find_file Funktion umzubauen.
Ich bin hier leider total mit meinem Latein am Ende und hoffe auf Hilfe!
Danke im Vorraus
stEEdZ
ich habe mit der Hilfe von Boost-Libraries ein Filesearch - Programm erstellt.
Das ganze soll dann später Plattformunabhängig laufen, deswegen auch kein Winapi.
Funktioniert übrigens auch sehr gut, mit nur einem Problem:
Wenn vom System der Zugriff auf bestimmte Ordner verweigert wird, bekommt man eine Exception reingeballert und das Programm terminiert!
Hier der Code:
PHP:
#include<boost/filesystem/operations.hpp>
#include<iostream>
#include<string>
#include <exception>
namespace bfs=boost::filesystem;
// Search for a file with the name 'filename' starting in directory 'dir_path',
// copy the path of the file in 'pfound' if found, and return true.
// Else return false.
bool find_file(const bfs::path & dir_path, const std::string & file_name, bfs::path & pfound)
{
if( !exists(dir_path) || !is_directory(dir_path) )
return false;
bfs::directory_iterator iter(dir_path), end_iter;
for(; iter!= end_iter; ++iter)
{
if( bfs::is_directory(*iter) )
{
if( find_file(*iter, file_name, pfound) )
return true;
}
else if( iter->leaf() == file_name )
{
pfound = *iter;
std::cout<<pfound<<std::endl;
return true;
}
}
return false;
}
int main() {
bfs::path my_path("c:\\");
bfs::path temp_path("");
try {
if (!find_file(my_path,"test.cpp", temp_path))
std::cout << "Konnte nicht gefunden werden!" << std::endl;
}
catch (std::exception const& e) {
std::cout << "EEEEERROR1elf" << std::endl;
std::cout << "type: " << typeid(e).name() << std::endl;
std::cout << "message: " << e.what() << std::endl;
}
system("pause");
}
Hier der Catch:
Code:
EEEEERROR1elf
type: class boost::filesystem::basic_filesystem_error<class boost::filesystem::b
asic_path<class std::basic_string<char,struct std::char_traits<char>,class std::
allocator<char> >,struct boost::filesystem::path_traits> >
message: boost::filesystem::basic_directory_iterator constructor: Zugriff verwei
gert: "c:\$Recycle.Bin\S-1-5-21-1829455090-3793272444-3375908254-500"
Drücken Sie eine beliebige Taste . . .
In einem anderem Forum wurde bei einem ähnlichem Thema dazu geraten, entweder die Exception zu fangen und zu ignorieren oder eine non-throwing Funktion zu verwenden oder eben die find_file Funktion umzubauen.
Ich bin hier leider total mit meinem Latein am Ende und hoffe auf Hilfe!

Danke im Vorraus
stEEdZ