包含所有文件信息的C ++文件列表

时间:2011-09-23 19:29:41

标签: c++ file winapi directory

我打算制作一个可以在我的电脑上的文件夹和我的NAS之间工作的程序。 它会列出两个文件夹中的所有文件,然后确定哪个文件更新,然后将其上传到其他设备。 我知道如何通过FTP上传文件,但我一开始就陷入困境,因为我不知道如何列出我的文件。我看了一点FindFirstFile()FindNextFile() WIN32_FIND_DATA。这样,我可以获取最后的写入数据,但这不会让我列出子目录。 您是否知道列出文件夹及其子目录中的所有文件以及保存列表中每个文件的信息的简单方法?

2 个答案:

答案 0 :(得分:3)

简单的方法是使用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";
    }
  }
}

答案 1 :(得分:2)

FindFirstFile()FindNextFile()可让您列出子目录。 WIN32_FIND_DATA的成员之一是dwFileAttributes,其中包含FILE_ATTRIBUTE_DIRECTORY作为目录条目。只需在该子目录中启动另一个FindFirstFile(),然后冲洗,重复。

MSDN上有一个示例,展示了如何使用FindFirstFile API,here