C++ File list with all file informations
I'm planning to make a program that would work between a folder on my computer and my NAS.
It would list all the files in both folders, then determine which file is newer, and then upload it to the other device.
I know how to up开发者_开发问答load files via FTP, but I'm stuck at the start, because I don't know how to list my files. I have looked a little at using FindFirstFile()
and FindNextFile()
with WIN32_FIND_DATA
. This way, I can get the last write data, but this doesn't let me list subdirectories.
Do you know any easy way listing all files in a folder and its subdirectory and saving the information of every file in a list?
The easy way is to use boost::recursive_directory_iterator
.
#include <boost/foreach.hpp>
#include <iostream>
#include <vector>
#include <boost/filesystem.hpp>
#include <boost/date_time.hpp>
#include <algorithm>
#include <iterator>
#include <ctime>
using boost::filesystem::path;
using boost::filesystem::recursive_directory_iterator;
using boost::filesystem::directory_entry;
using boost::filesystem::filesystem_error;
using boost::filesystem::last_write_time;
using std::vector;
using std::cout;
using std::copy;
using std::ostream_iterator;
using std::time_t;
using boost::posix_time::from_time_t;
int main(int ac, const char **av)
{
vector<const char*> args(av+1, av+ac);
if(args.empty())
args.push_back(".");
vector<directory_entry> files;
BOOST_FOREACH(path p, args)
{
boost::system::error_code ec;
copy(recursive_directory_iterator(p, ec),
recursive_directory_iterator(),
back_inserter(files));
}
BOOST_FOREACH(const directory_entry& d, files)
{
if(exists(d.path()))
{
cout << from_time_t(last_write_time(d.path())) << " " << d.path() << "\n";
}
}
}
FindFirstFile()
and FindNextFile()
does let you list subdirectories. One of the members of WIN32_FIND_DATA
is dwFileAttributes
which will include FILE_ATTRIBUTE_DIRECTORY
for a directory entry. Simply start another FindFirstFile()
in that subdirector, rinse, repeat.
There is a sample on MSDN that shows how to use the FindFirstFile
API, here.
精彩评论