【问题标题】:c++ 11 - Working with directoriesc++ 11 - 使用目录
【发布时间】:2014-07-15 14:41:12
【问题描述】:

我来自 Python,我希望使用目录(浏览、列表、创建目录、删除目录、移动文件等),就像 python 中的 os 一样。我在网上找到了很多教程,但它们都使用旧版本的 c++,而不是 11 - 我还试图不混合语法。在担心旧的东西之前,我想了解 11 - 另外,我不确定 c++ 11 中是否有比旧的东西更好的方法。

我看到一个问题提到http://www.boost.org/libs/filesystem/

如果它被广泛建议,我会深入研究,但我现在真的更喜欢坚持使用标准库。谁能指出我将使用的 c++11 标头和/或有关使用 c++11 的目录工作的教程? agian,我遇到过不少人,但它们似乎都很旧 - 我不确定我应该使用的搜索词(即标题名称)来找到我想要的东西。

【问题讨论】:

  • 文件 io 读/写是否正确?我在实践中做了一些(非常基本的..仍然需要努力)但我想先学习目录的东西,因为在很多情况下两者似乎齐头并进。因此,c++ 没有任何东西可以与目录一起使用吗?这似乎……很奇怪。那么我应该得到提升吗?
  • 我不会太担心学习旧的 C++,因为它仍然是相关的,而且 C++ 11 只是建立在现有语言的基础上,所以它都是必需的和有用的。学习 C++,然后学习 C++ 11 的附加功能实际上可能更容易,并且 boost 是一个值得考虑的好库,因为它可以在有或没有 C++ 11 标准的情况下与 C++ 一起使用。
  • @Curg : "学习 C++ 然后学习 C++ 11 的附加功能实际上可能更容易" 不能再不同意了——基于范围的for 和初始化列表,以及lambda 在较小程度上使 C++11 现在比以前更容易学习。
  • 好吧,我们可以选择不同意,C++ 11 可能会带来更多功能,但也会带来更难阅读的代码,我相信从更简单的级别开始并逐步提高。在跑步之前先学会走路是我的理念。

标签: c++ file c++11 file-io directory


【解决方案1】:

AFAIK,文件系统还没有成为标准,但它的灵感来自于 boost 文件系统。因此,恕我直言,您可以使用 boost 库,然后在没有太多工作的情况下切换到标准。 请参阅here 了解更多信息。

【讨论】:

  • ahhhh the afaik扔了一把第二个xd gotcha。谢谢,我想现在用 boost 运行不好,似乎是最建议的,如果你说以后不应该大转向 std,那就更好了。
  • @user1917081 :正如您在TR2 Filesystem proposal 中看到的,标准文件系统功能直接基于Boost.Filesystem v3。 (如果你好奇,实际的技术规范草案是here。)
【解决方案2】:

Boost 支持目录列表。 Qt 中还有QDir。还有POSIX dirent.h 标头可以启用目录列表:

#include <stdio.h>
#include <dirent.h>

int main(void) {
    DIR *dir;
    struct dirent *ent;
    if ((dir = opendir ("/")) != NULL) {
        /* print all the files and directories within directory */
        while ((ent = readdir (dir)) != NULL) {
            printf ("%s\n", ent->d_name);
        }
        closedir (dir);
     } else {
        /* could not open directory */
        perror ("");
        return -1;
     }

     return 0;
}

is 也有dirent.h for Windows。

http://ideone.com/yN64G0

【讨论】:

  • 谢谢!无论出于何种原因,没有人倾向于向我推荐 dirent... 不知道为什么,你知道吗?如果有充分的理由,也许病倒了,然后继续前进。
  • 不,我不知道,这是 POSIX 规范,应该是可移植的
猜你喜欢
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
  • 2012-04-19
  • 1970-01-01
  • 1970-01-01
  • 2011-04-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多