• ベストアンサー

ファイル名の取得について

noname#30727の回答

noname#30727
noname#30727
回答No.4

>私の今までのやり方だと、フォルダからファイル名を一つづつ取り出し、その都度ファイル名が同じか判断していました。 フォルダAから1つづつ取り出すときに "folderA\\*" など(Windows系の場合)で検索してますよね? 見つかったファイルが "filename.txt" だとしたら、すぐに "folderB\\filename.txt" でファイル検索すれば比較する手間もないですし、速度的にも気になるほどでもないと思います。 vector<string> と同等のものを作るのは大変ですが、機能限定ならそうでもないかも。 #include <stdio.h> #include <malloc.h> #include <string.h> typedef struct { int count; int limit; char **list; } svec; void init_svec(svec *v) { v->count = 0; v->limit = 0; v->list = NULL; } void add_svec(svec *v, const char *s) { char **temp; if (v->limit == 0) { v->limit = 1; v->list = (char**)malloc(sizeof(char*)); } else if (v->limit == v->count) { v->limit *= 2; temp = (char**)malloc(sizeof(char*) * v->limit); memcpy(temp, v->list, sizeof(char*) * v->count); free(v->list); v->list = temp; } v->list[v->count] = (char*)malloc(strlen(s) + 1); strcpy(v->list[v->count], s); v->count++; } void free_svec(svec *v) { int i; for (i = 0; i < v->count; i++) { free(v->list[i]); } if (v->limit) { free(v->list); } init_svec(v); } int main() { svec v; int i; init_svec(&v); add_svec(&v, "Black"); add_svec(&v, "Silver"); add_svec(&v, "Gray"); add_svec(&v, "White"); add_svec(&v, "Red"); add_svec(&v, "Purple"); for (i = 0; i < v.count; i++) { printf("%s\n", v.list[i]); } return 0; }

mk1234
質問者

お礼

回答ありがとうございます。 皆さんにいろいろ教えて頂いてこう言うのもなんですが、ファイル名を1つ取り出すたびに比較(あるいは検索)してもそう問題ないのかな?って気がしてきました。 なぜなら動的メモリの確保もそのつどメモリを確保し直すわけだし。 個人的に使うソフトのため、今回はこれで良しとさせてください。 もちろん、教えていただいたコードや考え方はしっかり勉強させていただきます。 ありがとうございました。

関連するQ&A

  • フォルダ内のファイル名を取得する

    windows 7なのですが、フォルダ内にあるファイル名をテキストとしてすべて一括で取得する方法はないでしょうか? また、フォルダの中にさらに複数のフォルダがあっても、上の階層のフォルダからすべてファイル名を取得する方法はないでしょうか? よろしくお願いいたします。

  • C# ファイルサイズの取得(ファイル名ではない)

    ファイルサイズ取得で検索するとファイル名のサイズを取得する方法ばかりで実際に存在しているファイルの大きさと合っていないのですが、どのようにコードを書けば良いでしょうか?

  • ファイル名の始めに“.”をつけてしまい消えた

    AndroidのSDマネージャーで隠しフォルダを作るときに、フォルダ名ではなく、ファイル名の最初に“.”を付けてしまい、すべてのファイルを表示にしても見れなくなりました。 消えてしまったのでしょうか?

  • フォルダーの中のファイル名を取り出す

    フォルダーの中のファイル名を取り出し配列に格納する方法はありますか?

  • フォルダ内にあるファイル名を取得したい

    cを利用して、指定したフォルダの中にある全てのファイルの名前を取得するプログラムを作りたいのですが、適した関数がわかりません。 指定するフォルダはあらかじめ決めうちで、その中には.txtのファイルのみを格納します。 どなたか教えてください。できれば自分で作りたいのでヒントをください。お願いします。 VisualC++.netを使っています。OSはXPです。

  • delphi5でのディレクトリ内ファイル名の取得

    こんにちは。質問があります。 delphiのアプリケーションであるディレクトリのフォルダ内のファイルを 別のディレクトリのフォルダ内に名前を変えてコピーしようと考えています。 基本的にコピー元のディレクトリ名はわかりません。 コピー先のディレクトリは存在しなければ、名前を指定して作成し、その中に名前を変更したファイルを格納する流れです (わかりづらいかも・・・) フォルダが存在しなければ作成したり、ファイル名を変更してコピーする のはわかったのですが、コピー元のディレクトリ内のファイル(もしくはディレクトリ)名を取得することがわかりません。 全てソースの中でプログラムしたいと考えています。(VCLは使用しない) こんなんでもわかっちゃったりする方がいらっしゃいましたら、 どうか愛の手を・・・

  • フォルダの全ファイル名を自動的に取り込むには

    ビジュアルベーシク(VB5)でドライブ、フォルダ、ファイルの各アイコンをフォームに配置して動作させると、手動でファイル名を取得できますが、フォルダを指定したらその中のファイル名全てを、自動的に文字配列変数に取り込むにはどうしたらよいでしょうか?よろしくお願いします。

  • フォルダに入っているファイルの取得

    フォルダ/abcに入っている、JPGの画像のファイルを配列@defに取得するコードをお願いします。

    • ベストアンサー
    • Perl
  • ファイルの拡張子を取得したい

    あるフォルダにファイルが存在しています。ファイルが存在していることは確認できています。 ファイル名まではわかっているのですが、拡張子がわかりません。 実在するファイルの拡張子を取得する方法を教えてください。

    • 締切済み
    • PHP
  • 同じファイル名なのに同じと判定しない

    重複データを削除するために、有名どころであるFileManyというフリーソフトを使っているのですが、同じファイル名なのに同じと判定しないことがあります。 エクスプローラーや別の同様なアプリでは同じ名前と判定します。 人の目で見ても当然同じファイル名です。 フォルダ階層も深くないですし、ファイル数も1個で比較してもダメです。 プログラムのコードは知りませんが、普通に考えて、パスからファイル名を抜き出し、if文で比較しているだけだと想像します。 ほぼ正しく動くのに、例外的に動かないことが(バグ)あると困りますよね。 なぜこんなことが起きてしまうのでしょうか?