【问题标题】:Determining files in a directory确定目录中的文件
【发布时间】:2010-03-09 14:47:15
【问题描述】:

我来自 C# 背景,我正在从事 C++ 项目。我需要打开目录中的文件,然后处理文件中的数据。问题出在我的目标环境(Greenhills Integrity)上,我无法访问“目录”。似乎 C++ 没有目录的概念。为什么不?这个问题在 C# 中很简单。我无法链接到任何大型库(BOOST 或 dirent)来获取文件。我可以使用 fopen 打开文件,但我并不总是知道文件名,因此我必须将目录“strcat”到每个文件名才能“打开”文件。

我需要一种方法来获取目录中的文件名,而无需使用外部 API。这可能吗?

【问题讨论】:

  • 在 C++ 中没有目录的概念。底层系统将文件和目录视为“句柄”。 IIRC 文件系统句柄上有一个标志,指示它是否是目录(查看 stat 函数。)
  • 添加了 posix 标签,因为 Greenhills Integrity 支持 POSIX。

标签: c++ posix


【解决方案1】:

主要的 C++ API 都有目录。在 POSIX 上以 readdir 开头,在 Windows 上以 FindFirstFile() 开头。 Greenhills 好像是support POSIX

【讨论】:

  • 也许有人认为在 Win32 和 Unix 上完成某事的提示对于在 Greenhills Integrity 上进行黑客攻击的人并没有太大帮助?请注意,虽然不是我,但我不会责怪他们。
  • 我最初投了反对票,因为 readdir 不是通用 C++ 函数;但是已经重新投票,因为编辑表明所需的功能是特定的。
【解决方案2】:

不,这是不可能的。 C++ 没有“内置”目录功能——你需要使用某种库。

【讨论】:

  • 当然可以。虽然 C++ 没有任何特定的目录类(如文件流),但您可以只使用底层系统调用 - readdir 等。 cs.cf.ac.uk/Dave/C/node20.html
  • readdir 不是系统调用。 C++ 中的所有 I/O(与 C 一样)都是通过库执行的。
【解决方案3】:

检查您的操作系统。每个人的目录处理都不同。如果要在 Microsoft Windows 上列出/查询目录,则必须使用 Windows 32 API;如果要在 Linux 上列出/查询目录,则必须使用 Linux API(例如 opendir/stat)。

猜你喜欢
  • 2012-06-12
  • 2013-04-03
  • 1970-01-01
  • 2019-02-22
  • 1970-01-01
  • 1970-01-01
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多