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

发布于 2024-12-06 14:46:54 字数 302 浏览 0 评论 0原文

我计划制作一个程序,可以在我的计算机上的文件夹和我的 NAS 之间运行。 它会列出两个文件夹中的所有文件,然后确定哪个文件较新,然后将其上传到其他设备。 我知道如何通过 FTP 上传文件,但我一开始就卡住了,因为我不知道如何列出我的文件。我稍微研究了一下如何使用 FindFirstFile()FindNextFile() 以及 WIN32_FIND_DATA。这样,我可以获得最后写入的数据,但这不允许我列出子目录。 您是否知道列出文件夹及其子目录中的所有文件并将每个文件的信息保存在列表中的简单方法?

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 upload 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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

小ぇ时光︴ 2024-12-13 14:46:54

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

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";
    }
  }
}
飞烟轻若梦 2024-12-13 14:46:54

FindFirstFile()FindNextFile() 确实可以让您列出子目录。 WIN32_FIND_DATA 的成员之一是 dwFileAttributes,它将包含目录条目的 FILE_ATTRIBUTE_DIRECTORY。只需在该子目录中启动另一个 FindFirstFile(),冲洗,重复即可。

MSDN 上有一个示例演示如何使用 FindFirstFile API,此处

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文