C ++ Список файлов со всей информацией о файлах - PullRequest
1 голос
/ 23 сентября 2011

Я планирую создать программу, которая будет работать между папкой на моем компьютере и моим NAS. Он будет перечислять все файлы в обеих папках, затем определять, какой файл более новый, и затем загружать его на другое устройство. Я знаю, как загружать файлы через FTP, но я застрял в начале, потому что я не знаю, как составить список своих файлов. Я немного посмотрел на использование FindFirstFile() и FindNextFile() с WIN32_FIND_DATA. Таким образом, я могу получить последние данные записи, но это не позволяет мне перечислять подкаталоги. Знаете ли вы какой-нибудь простой способ перечисления всех файлов в папке и ее подкаталоге и сохранения информации о каждом файле в списке?

Ответы [ 2 ]

3 голосов
/ 23 сентября 2011

Самый простой способ - использовать 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";
    }
  }
}
2 голосов
/ 23 сентября 2011

FindFirstFile() и FindNextFile() позволяют перечислять подкаталоги. Одним из членов WIN32_FIND_DATA является dwFileAttributes, который будет включать FILE_ATTRIBUTE_DIRECTORY для записи каталога. Просто запустите другой FindFirstFile() в этом подкаталоге, промойте, повторите.

В MSDN есть пример, демонстрирующий использование FindFirstFile API, здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...