C言語でディレクトリを扱う
C言語でディレクトリを扱う
いきなり本題ですが例えばC:\work\ディレクトリに
kyouto.png
index.html
soccer.wmv
main.h
というファイルがあったとします
コレをC言語のプログラムで把握するにはどうすればいいのでしょうか?
具体的には
char *dirfile[128];
dirfile[0]="kyouto.png";
dirfile[1]="index.html";
dirfile[2]="soccer.wmv";
dirfile[3]="main.h";
と配列にこんな感じで格納してもらいたいです(これはソースに直書きしているのでコンパイル後に修正するのが不可能ですけど)
私なりにはファイルの入出力の時みたいに こんな感じにするのかなと思ったのですが、本当にこうやるのは可能ですか?
kyouto.png
index.html
soccer.wmv
main.h
というファイルがあったとします
コレをC言語のプログラムで把握するにはどうすればいいのでしょうか?
具体的には
char *dirfile[128];
dirfile[0]="kyouto.png";
dirfile[1]="index.html";
dirfile[2]="soccer.wmv";
dirfile[3]="main.h";
と配列にこんな感じで格納してもらいたいです(これはソースに直書きしているのでコンパイル後に修正するのが不可能ですけど)
私なりにはファイルの入出力の時みたいに こんな感じにするのかなと思ったのですが、本当にこうやるのは可能ですか?
Re: C言語でディレクトリを扱う
WindowsAPIですがFindFirstFileという関数はいかかでしょうか?
詳細:http://msdn.microsoft.com/ja-jp/library/cc429233.aspx
詳細:http://msdn.microsoft.com/ja-jp/library/cc429233.aspx
Re: C言語でディレクトリを扱う
>本当にこうやるのは可能ですか?
linuxなら、opendir(DIR *dir),readdir(DIR *dir),closedir(DIR *dir)
( dirent.h をインクルードします。)
opendir("C:\work",r); だからこれは×ですね
みたいなかんじ。
ただ
>C:\work\ディレクトリに
ですから、WINDOWSかも。環境は書かないとね
linuxなら、opendir(DIR *dir),readdir(DIR *dir),closedir(DIR *dir)
( dirent.h をインクルードします。)
opendir("C:\work",r); だからこれは×ですね
#include <dirent.h>
func()
{
DIR *dir;
struct dirent *dp;
dir = opendir("/work");
while(( dp = readdir(dir)) != NULL)
{
// dp->d_name がファイルパス名
}
closedir(dir);
}
ただ
>C:\work\ディレクトリに
ですから、WINDOWSかも。環境は書かないとね
Re: C言語でディレクトリを扱う
すいません、色々混乱させてしまったみたいですが環境はwindowsです
opendirっていう関数がほんとうにあるとは知らず適当に書いたんです
windows環境で上に示したことをするにはどうすればいいでしょうか?
opendirっていう関数がほんとうにあるとは知らず適当に書いたんです
windows環境で上に示したことをするにはどうすればいいでしょうか?
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語でディレクトリを扱う
C言語の標準ライブラリには有りませんので、shiro4aoさんの書いたとおりWin32API(WindowsAPI)を使います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C言語でディレクトリを扱う
shiro4ao さんが書きました:WindowsAPIですがFindFirstFileという関数はいかかでしょうか?
詳細:http://msdn.microsoft.com/ja-jp/library/cc429233.aspx
うーん、やっぱりWIN32API使わなきゃいけませんか……softya(ソフト屋) さんが書きました:C言語の標準ライブラリには有りませんので、shiro4aoさんの書いたとおりWin32API(WindowsAPI)を使います。
fopenとかはUNIXと互換性があるのにディレクトリはダメってヒドイですね(windowsのこっちが文句行っても仕方ないか)
それで考えたんですけどPerlでディレクトリを開く関数ってありますか?
C言語ではなくPerlでお願いします
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: C言語でディレクトリを扱う
それこそPerlならopendirがあるはずですが、LinuxとWinで同じ動作するかは覚えてません。Win32APIを避けるってことは両方で使いたいんですよね?
>fopenとかはUNIXと互換性があるのにディレクトリはダメってヒドイですね(windowsのこっちが文句行っても仕方ないか)
opendirはC言語では非標準関数ですので、あったらラッキー程度に考えてください。
>fopenとかはUNIXと互換性があるのにディレクトリはダメってヒドイですね(windowsのこっちが文句行っても仕方ないか)
opendirはC言語では非標準関数ですので、あったらラッキー程度に考えてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: C言語でディレクトリを扱う
ファイルシステムが違うのだから仕方ありません。COFE さんが書きました:fopenとかはUNIXと互換性があるのにディレクトリはダメってヒドイですね(windowsのこっちが文句行っても仕方ないか)
標準ライブラリは互換性のある部分だけを持ってきてるわけですから。
#ActivePerlで動作確認しました。COFE さんが書きました:それで考えたんですけどPerlでディレクトリを開く関数ってありますか?
C言語ではなくPerlでお願いします
(追記)
ウインドウズでもgccでdirent.h(の関数)が使えますね。
#Cygwin版で確認しました。