Re: a function to get the full path names of a list of files
On 2013-01-31 06:35, redstone-cold@163.com wrote:
a function to get the full path names of a list of files
First ,I am not a C++ programmer but a python programmer .I am only a
little familiar with C++ ,so I cannot implement this function myself
,my use of this function is to wrap it into Python to improve my
program??s working efficiency .
I have already know a list of files in a specified directory or its
subdirectories , I need a function to get the full path names of this
list of files ,now I am going to give out the prototype of this
function , I wonder if you can help me to implement this function .
function name : get FullPathNames
parameter : the path to the parent directory that all of that list of
files are contained in, a list of file names the I need to get their
full path names back
return value : a list of full path names
At the current moment, the C++ Standard library does not provide direct
functionality to implement this request, but there exists a proposal to
add a filesystem library to the Library:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2013/n3505.html
It is based on the existing Boost Filesystem library, see
http://www.boost.org/doc/libs/1_52_0/libs/filesystem/doc/
I have been using boost::filesystem for years and I would recommend to
use it. With a C++11 compiler your function would be written as
#include <algorithm>
#include <iterator>
#include <vector>
#include "boost/filesystem/operations.hpp"
namespace fs = boost::filesystem;
std::vector<fs::path> FullPathNames(const fs::path dir)
{
std::vector<fs::path> list;
std::transform(fs::directory_iterator(dir), fs::directory_iterator(),
std::back_inserter(list), [](const fs::directory_entry& de) { return de.path(); });
return list;
}
If your compiler does not (yet) lambda expressions, you would rewrite
the code as follows:
#include <algorithm>
#include <iterator>
#include <vector>
#include "boost/filesystem/operations.hpp"
namespace fs = boost::filesystem;
struct PathConverter
{
fs::path operator()(const fs::directory_entry& de) const { return de.path(); }
};
std::vector<fs::path> FullPathNames(const fs::path dir)
{
std::vector<fs::path> list;
std::transform(fs::directory_iterator(dir), fs::directory_iterator(),
std::back_inserter(list), PathConverter());
return list;
}
HTH & Greetings from Bremen,
Daniel Kr??gler
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]