2014-10-19 127 views
0

尺寸以下功能讀取目錄和插入的文件名(的push_back())爲載體檢查文件從當前目錄

#include <dirent.h> 

void open(string path){ 

    DIR* dir; 
    dirent *pdir; 

    dir = opendir(path.c_str()); 
    while (pdir = readdir(dir)){ 
     vectorForResults.push_back(pdir->d_name); 
    } 
} 

問題:使用靴庫如何檢查每個文件的大小(從當前directiory) ?

我找到方法上http://en.highscore.de/cpp/boost/filesystem.html

描述它例如爲:

boost::filesystem::path p("C:\\Windows\\win.ini"); 
std::cout << boost::filesystem::file_size(p) << std::endl; 

可能有人請幫助如何實現提升它在我的open()函數?特別是如何將當前目錄路徑名稱分配給變量p,然後遍歷文件名稱。

+2

要是有某種[參考](http://www.boost.org/doc/libs /1_56_0/libs/filesystem/doc/reference.html)... – user657267 2014-10-19 11:43:15

+0

boost :: filesystem :: path p(path.c_str())但沒有成功... – 2014-10-19 11:43:46

+0

[Printing off \ _t file size from dirent struct](http://stackoverflow.com/questions/20528616/打印-t-file-size-from-dirent-struct) – usr2564301 2014-10-19 11:47:38

回答

1

這是否幫助?

Live On Coliru

#include <boost/filesystem.hpp> 
#include <boost/range/iterator_range.hpp> 
#include <iostream> 

namespace fs = boost::filesystem; 

int main() 
{ 
    for(auto& f : boost::make_iterator_range(fs::directory_iterator("."), {})) 
    { 
     if (fs::is_regular(f)) 
      std::cout << fs::file_size(f) << "\t" << f << "\n"; 
    } 
} 

注意"."是當前目錄

+0

它工作時,我改變了第一行:for(auto& f:boost :: make_iterator_range(fs :: directory_iterator(「。」)))非常感謝@sehe! – 2014-10-19 21:45:25

0
#include <dirent.h> 

void open(std::string path){ 

    DIR* dir; 
    dirent *pdir; 

    dir = opendir(path.c_str()); 
    while (pdir = readdir(dir)){ 
     std::string p = path + "/" + pdir->d_name; 
     vectorForResults.push_back(pdir->d_name); 
     std::cout << boost::filesystem::file_size(p) << std::endl; 
    } 
} 

我想這就是你要找的。 你不需要創建一個boost :: filesystem :: path對象。

或者你也可以使用C函數統計:http://linux.die.net/man/2/stat

+0

感謝您的回答@ Marchah,雖然這樣的代碼崩潰的應用程序... – 2014-10-19 12:12:43

+0

是的抱歉,我沒有測試代碼,我沒有在這臺計算機上的c + + compilator – Marchah 2014-10-19 12:14:34