从当前目录检查文件大小

时间:2014-10-19 11:31:56

标签: c++ boost

在函数读取目录下,将文件名(通过push_back())插入到vector

#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);
    }
}

问题:如何使用启动库检查每个文件的大小(来自当前的指令)?

我找到了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 个答案:

答案 0 :(得分: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";
    }
}

请注意"."是当前目录

答案 1 :(得分: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函数stat:http://linux.die.net/man/2/stat