inのls
機能をシミュレートする必要があります。unix
C
「Cでタイプごとに任意のディレクトリの下にあるすべてのファイルを取得する」プログラムを作成する必要があります。
ファイルのリストを取得するプログラムをグーグルで見つけましたが、それらはアルファベット順にソートされています。ファイルの種類ごとに並べ替えたい。お願いします、誰か助けてくれませんか?
ファイルはメモリ内のどこかに保存する必要があります。これは学校のプロジェクトのように見えるので、ファイル名を連結リストにロードし、連結リストをソートするアルゴリズムの 1 つを採用することをお勧めします。これは、演習自体の目的である可能性があります。
「拡張子」、つまり、誰かが.WMAfile type
ファイルの名前を変更して .MP3 と呼んだとしても、.MP3 は「Fraunhofer MPEG Layer 3」タイプであると仮定しましょう。「真の」ファイルタイプを検出するには、「マジックファイル」と呼ばれるものを使用する必要があり、そこにはlibmagicがありますが、それは価値がありますか? (それが博士論文または商用プログラムである場合、答えは「まったくイエス」です。プログラムが平均的な教授によって評価される場合、「あまりにも賢い」と見なされるリスクがあるかどうかを判断します).
リンク リスト エントリはstruct
、ファイル名とその拡張子へのポインタを含む である必要があります。これは、拡張子が「ファイル名の最後のドットに続くもの」であることを考慮することで見つけることができるため、strrchr
関数を活用できます。一部のファイルには拡張子がないことに注意してください。
拡張機能へのポインタを保存するか、strdup
. 前者はより高速で無駄がありませんが、最初の構造体ポインター (ファイル名) を解放する必要があり、2 番目は絶対に解放してはならないことを覚えておく必要があります。2 つのポインターの動作が異なることは、メンテナンス時間と速度/メモリのどちらを重視するかによって、悪いコーディング手法 (そうです) または巧妙なハック (そうです) と見なされる可能性があります。
ファイル名の取得自体については、万能な方法はないため、Boost などのライブラリが開発されています。しかし、学校のプロジェクトでは、POSIX システムに制限して、、、および を使用することがopendir
できます。readdir
closedir
stat
操作 (ディレクトリの取得、リストの並べ替え、リストの表示) をさまざまな機能に分けて、それらを個別に段階的にテストできるようにすることをお勧めします (例: フォルダーの取得ではすべてが取得され、次のことができます)。ファイルをソートされていない順序で表示するなど)。