【问题标题】:Reading file names with C++用 C++ 读取文件名
【发布时间】:2009-03-04 05:40:39
【问题描述】:

有没有办法使用纯 C(或 C++)从文件夹中读取文件名?这意味着不包括 windows.h(没有 FindFirstFile() 等)。

fstream 好像没有这个功能。我知道文件名取决于操作系统,但我希望有一些库可以在 Windows 中使用它。

【问题讨论】:

标签: c++ file-io


【解决方案1】:

boost filesystem 是一个不错的解决方案。当然,在幕后,它仍然会使用 Windows API 调用(当您在 Windows 上构建时),但这是从您那里抽象出来的。

【讨论】:

    【解决方案2】:

    C++ 通常不为您提供此类功能。一个跨平台的解决方案是使用boost::filesystem

    【讨论】:

      【解决方案3】:

      尝试使用 POSIX 函数 opendir() 和 readdir() 来遍历目录。请参阅this link 的手册页,其中包含一些很好的示例代码。这些功能应该在大多数平台上都可用,包括 Windows 和 UNIX。

      【讨论】:

      • 不幸的是,当你第一次给他这个答案时他没有听:-P。
      • 这些功能在 Windows 上不可用,因为 Windows 不是 POSIX。但是,它们在 Cygwin 下可用。
      • Windows 不提供一小部分 posix 函数作为其(好吧,失败)-posix 子系统的一部分吗?我从来不知道这到底是什么,什么不是。
      • windows NT 提供了一个“posix 子系统”,它与 Posix 的兼容性有限。我相信最近的版本已经放弃了这一点,而且它从一开始就没有得到很好的支持。
      【解决方案4】:

      如果你想在 windows 上使用 opendir() 和 readdir(),你可以下载 MinGW,一个著名的 GNU 编译器集合的 windows 端口。它包括 UNIX 头文件的 windows 端口,包括 dirent.h,它将允许您使用指定的功能。请记住,无论哪种方式,它们都会调用原生 API。

      -约翰

      【讨论】:

      • 实际上,我相信您需要在 cygwin.dll 之上构建才能使其正常工作。 mingw 仅仅提供了一个与微软运行时链接的 c/c++ 编译器。
      • 这就是我所说的......它会调用本机 Win32 API,但您不必在代码中使用它们。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-05
      • 1970-01-01
      • 2014-09-03
      • 2017-05-02
      相关资源
      最近更新 更多