2009-11-26 117 views
0

我剛開始學習C++,目前正在使用代碼塊。 我想寫一個應用程序,可以搜索目錄中的文件,包括它的子目錄,但我似乎找不到任何好的例子,我已經閱讀了某個地方,這是唯一可能通過像庫一樣的庫。C++中的文件搜索

  1. 這是真的嗎?
  2. 任何沒有庫的例子嗎?

在此先感謝

回答

2

升壓不是掃描目錄的唯一途徑,但它可能是做一個平臺中立的方式最簡單的方法 - 即不使用特定於平臺的API(如Win32)。

下面是使用升壓一個簡單的例子:

#include <boost/filesystem.hpp> 
#include <iostream> 
#include <iterator> 
#include <set> 

std::set<boost::filesystem::path> getDirContents (const std::string& dirName) 
{ 
    std::set<boost::filesystem::path> paths; 
    std::copy 
     (boost::filesystem::directory_iterator (dirName) 
     , boost::filesystem::directory_iterator() 
     , std::inserter (paths, paths.end()) 
     ); 

    return paths; 
} 

int main (int argc, char* argv[]) 
{ 
    std::set<boost::filesystem::path> paths = getDirContents ("C:\\"); 
    std::copy 
     (paths.begin() 
     , paths.end() 
     , std::ostream_iterator<boost::filesystem::path> (std::cout, "\n") 
     ); 
    return 0; 
} 
+0

在使用庫時速度沒有明顯下降嗎? – Mars 2009-11-26 17:16:16

+1

當搜索文件時,IO將成爲你最大的問題,而不是一些庫開銷。 – tstenner 2009-11-26 17:23:49

+1

@mars,boost類僅僅是底層系統API調用的精簡包裝 - 開銷應該是可以忽略的,尤其像tstenner所說的,與實際的API調用時間相比。 – 2009-11-26 17:27:22

2

是的,這是真的:標準C++沒有API來列出目錄的內容。

讓你無論是做它通過庫(升壓或其他),或通過對你使用(在Windows上用FindFirstFile/FindNextFile Unix上,執行opendir/readdir的)操作系統的本地調用。其他答案有示例代碼。

但是,如果你剛剛開始學習C++,現在可能更好的是不要與它們爭鬥。重點關注一開始就學習標準C++。編寫你想要的應用程序是一個有用的練習,但我會推遲一點,直到你更熟悉標準C++。

+0

是不是opendir/readdir POSIX? – mrduclaw 2009-11-26 17:43:29