【问题标题】:How to read file index of a directory using C/C++?如何使用 C/C++ 读取目录的文件索引?
【发布时间】:2013-07-07 01:54:09
【问题描述】:

我们在 C 或 C++ 中使用什么方法(或库函数)来读取目录中的文件索引(即所有文件的列表)。

我的动机是创建一个函数,通过读取目录中的文件列表,在目录(或文件系统)中进行扩展搜索。由于我们还不知道磁盘上存在哪些文件,因此我们无法打开和读取它们。

但是,我知道 Unix/Linux 中的 'ls' 和 'dir' 之类的程序能够读取目录的内容;由于这些操作系统也大多是用 C 语言编写的,因此必须有某种方法可以在一个程序下创建类似的功能。

以下是我要使用的算法:

  1. 接受用户输入以导航到文件系统上的目录
  2. 读取文件内容
  3. 制作一个链表并将我们刚刚读取的目录的内容添加到其中
  4. 使用链表读取文件名并使用现有算法逐一搜索文件内容
  5. 将输出写入屏幕,解释找到的结果(结果按现有算法确定的顺序或优先级编入索引)。

我已经编写了第 4 步和第 5 步中使用的算法,并且可以自己完成第 1 步和第 3 步。我遇到的唯一问题是第 2 步。C/C++ 中是否有任何库或任何其他方法可以解决这个问题?

谢谢!

【问题讨论】:

  • C++ 和 C 都没有提供这样的功能,您需要找到并使用合适的库,例如 Boost.Filesystem。
  • 或者等待 C++14 和 filesystem 一起出现 :-)
  • 顺便说一句,磁盘分区可能没有任何文件。一些软件正在使用原始磁盘分区。从技术上讲,分区可能包含文件系统,而这些文件系统包含文件。
  • 从来不知道像 Boost 这样的东西。我一定会试试的。
  • 我刚刚编辑了这个问题,使其更具描述性。

标签: c++ c linux


【解决方案1】:

在 Linux(和一些 Posix 系统)上,您可能希望使用 C 中的 nftw(3) 库函数。

当然,还有find(1) 实用命令,可在 shell 中使用。

也许您还需要readdir(3) 函数和stat(2) 系统调用。

正如一些人评论的那样,许多库可以帮助您,例如在 C++ 中:boostPoco 库、QtCore,在 C 中:glib(来自 Gtk)等。

【讨论】:

    【解决方案2】:

    更新#1:适应已编辑的问题

    知道目录的路径后,您可以使用opendir() 打开目录。然后通过readdir() 读取目录。您检索您想要的内容,然后使用closedir() 关闭该目录。请注意,这些是 UNIX 的系统调用。所以你的代码不会是可移植的。无论如何,在这个头文件 (dirent.h) 中,您可以找到所有必要的函数来处理目录。

    原答案:

    可能有用的是使用exec() 系统调用。您通常会调用为您完成工作的下划线系统调用并在您的程序中收集结果。在这种情况下,您使用的是 Linux(根据标签),因此您可以使用可以列出您的文件的 lsfindgrep 程序。可以在here 找到示例。

    【讨论】:

    • 太好了。我刚刚阅读了有关 readdir() 函数的内容,我认为它应该在大多数情况下都有效。我肯定会将它用于 Unix 系统,但我仍在寻找可以跨平台工作的东西。
    【解决方案3】:

    在浏览论坛时,我发现这个问题与我的相似。

    How can I get the list of files in a directory using C or C++?

    我认为这回答了我的问题。

    【讨论】:

      猜你喜欢
      • 2023-03-25
      • 1970-01-01
      • 1970-01-01
      • 2015-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多