2010-06-07 63 views

回答

6

Boost.Filesystem是一个很棒的图书馆。这是我写的,而以前,你可以改变搜索标准很容易,一旦你知道图书馆(你可以查询的大小和扩展名)代码:

#include <iostream> 
#include <string> 
#include <vector> 
#include <boost/filesystem.hpp> 

using namespace std; 
using namespace boost::filesystem; 

void find_file(const path& root, const string& file_name, vector<path>& found_files) 
{ 
     directory_iterator current_file(root), end_file; 
     bool found_file_in_dir = false; 
     for(; current_file != end_file; ++current_file) 
     { 
       if(is_directory(current_file->status())) 
         find_file(*current_file, file_name, found_files); 
       if(!found_file_in_dir && current_file->leaf() == file_name) 
       { 
         // Now we have found a file with the specified name, 
         // which means that there are no more files with the same 
         // name in the __same__ directory. What we have to do next, 
         // is to look for sub directories only, without checking other files. 
         found_files.push_back(*current_file); 
         found_file_in_dir = true; 
       } 
     } 
} 

int main() 
{ 
     string file_name; 
     string root_path; 
     vector<path> found_files; 

     std::cout << root_path; 
     cout << "Please enter the name of the file to be found(with extension): "; 
     cin >> file_name; 
     cout << "Please enter the starting path of the search: "; 
     cin >> root_path; 
     cout << endl; 

     find_file(root_path, file_name, found_files); 
     for(std::size_t i = 0; i < found_files.size(); ++i) 
       cout << found_files[i] << endl; 
} 
+2

他们现在有recursive_directory_iterator,所以这可以变得更简单! – Cubbi 2010-06-07 22:51:08

+0

@Cubbi谢谢!我没有看看最近添加到文件系统,但肯定最好使用库设施而不是我的代码:) – AraK 2010-06-07 22:54:04

相关问题