2014-10-19 122 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