开发者

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.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜