- 締切済み
ファイルオープンについて
ファイルオープンは,具体的にファイル名を指定しなければならないのでしょうか? 例えば,".ini"の拡張子を持つ任意のファイルをファイルオープンしたいと思っています。 または,そのディレクトリ内にあるファイル名全てを列挙する方法が知りたいです。 ご存知の方,何卒アドバイスを下さるようにお願いします。
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- toysmith
- ベストアンサー率37% (570/1525)
老婆心ながら… UNIXのファイルシステム(i-nodeファイルシステム)では1ディレクトリに数千個もファイルを置くとopen/closeにとんでもない時間がかかります。 i-nodeはカスケード方式ですから…。 1ディレクトリに置くファイル数を制限してディレクトリ分割することをオススメします。 top/a/a*.ini top/b/b*.ini ... こんな感じでもいいし、時間で分割してもいいし。 もっとアクセス速度を上げるならファイル作成時にハッシュ表を作ってしまうほうがいいでしょう。 無駄なディレクトリ検索をしなくて済みます。 仕様上どうしようもないかもしれませんが…。
- arata
- ベストアンサー率49% (139/279)
UNIXの場合、されようとしている事でしたら、 $ 作成するフィルター *.ini のように、ワイルドカードで、ファイルを指定してやれば、mainの引数にファイル名が展開された状態できます。 (しばらくUNIX触ってないのでワイルドカードが間違っているかもしれません。) あとは、 ・引数のファイルをオープン ・このファイル名の拡張子を変更したものをオープン ・処理結果を出力する を繰り返せばいいのでは?
- toysmith
- ベストアンサー率37% (570/1525)
「任意のファイルをオープン」なんていう危険な関数は標準では用意されません。 どうしても必要なら(必要な状況は思いつきませんが…)作るしかないですね。 環境が指定されていないのですがWindowsでいいですか? 言語はCでいいですか?C++ですか? とりあえず、Win32APIを使ってCで書くなら FindFirstFile() FindNextFile() FindClose() これらを組み合わせればディレクトリ(フォルダ)内のファイルの列挙は可能です。 UNIX系ならdirent.hを参照してください。 拡張子が指定されているのでMacintoshは除外しましたが必要なら調べますよ。 (多分PBコールにあるから)
補足
ご親切なアドバイスを頂きまして,本当にありがとうございます。 初心者なので,とんちんかんな事を言っていたらごめんなさい。環境は,UNIXでC言語を使っています。 必要と思ったきっかけは,"○○○.ini"というファイルが,数千個ほどありまして,それらを各々加工(フィルタ)して"○○○.dat"というファイルにしようと思ったからです。 これからdirent.hを調べてみます。 まだ分からない事があると思いますので,その時はまたよろしくお願いします。ありがとうございました。