-6

ディレクトリ内のファイル インデックス (つまり、すべてのファイルのリスト) を読み取るために、C または C++ でどのメソッド (またはライブラリ関数) を使用しますか。

私の動機は、ディレクトリ内のファイルのリストを読み取ることによって、ディレクトリ (またはファイル システム) 内で拡張検索を可能にする機能を作成することです。ディスク上にどのファイルが存在するかをまだ知らないため、それらを開いて読み取ることはできません。

ただし、Unix/Linux の 'ls' や 'dir' などのプログラムは、ディレクトリの内容を読み取ることができることを知っています。これらの OS もほとんどが C で書かれているため、1 つのプログラムで同様の機能を作成する方法が必要です。

以下は、使用したいアルゴリズムです。

  1. ユーザーからの入力を取得して、ファイル システム上のディレクトリに移動します。
  2. ファイルの内容を読む
  3. リンクされたリストを作成し、読み込んだディレクトリの内容を追加します
  4. リンクされたリストを使用してファイル名を読み取り、既存のアルゴリズムを使用してファイルの内容を 1 つずつ検索します
  5. 見つかった結果を説明する出力を画面に書き込みます (結果は、既存のアルゴリズムによって決定された順序または優先順位でインデックス付けされます)。

ステップ 4 と 5 で使用するアルゴリズムをコード化したので、ステップ 1 と 3 を自分で実行できます。私が抱えている唯一の問題はステップ 2 にあります。C/C++ のライブラリや、この問題を解決できる他の方法はありますか?

ありがとうございました!

4

3 に答える 3

2

更新#1:編集された質問への適応

opendir()ディレクトリを開くために使用できるディレクトリのパスがわかります。次に、ディレクトリを介して読み取りますreaddir()。必要なものを取得し、その後でディレクトリを閉じますclosedir()。これらはUNIXのシステム コールであることに注意してください。したがって、コードは移植できません。いずれにせよ、このヘッダー ファイル ( dirent.h) には、ディレクトリを処理するために必要なすべての関数が含まれています。

元の答え:

うまくいくかもしれないのは、exec()システムコールを使用することです。通常は、下線部のシステム コールを呼び出します。このシステム コールが自動的に処理を実行し、プログラムで結果を収集します。この場合、(タグによると) Linux を使用しているため、ファイルを一覧表示できるls, find,grepプログラムを使用できます。例はここにあります。

于 2013-07-09T12:55:18.343 に答える
0

Linux (および一部の Posix システム) では、C のnftw(3)ライブラリ関数を使用したい場合があります。

もちろん、シェルから使用できるfind(1)ユーティリティ コマンドもあります。

readdir(3)関数とstat(2)システムコールも必要かもしれません。

そして、何人かがコメントしたように、多くのライブラリがあなたを助けることができます。例えば、C++: boostPocoライブラリ、QtCore、および C: glib (Gtk から) などです。

于 2013-07-09T12:54:54.323 に答える
0

When browsing through the forum, I found this question which was similar to mine.

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

I think that answers my problem.

于 2013-07-11T13:27:35.327 に答える