开发者

C++ File list with all file informations

开发者 https://www.devze.com 2023-04-06 21:10 出处:网络
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

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

精彩评论

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

关注公众号