C言語でディレクトリを扱う

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
COFE
記事: 97
登録日時: 14年前

C言語でディレクトリを扱う

#1

投稿記事 by COFE » 14年前

いきなり本題ですが例えば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";
と配列にこんな感じで格納してもらいたいです(これはソースに直書きしているのでコンパイル後に修正するのが不可能ですけど)
私なりにはファイルの入出力の時みたいに

コード:

main(){
	DIR *dp
	opendir("C:\work",r);
}
こんな感じにするのかなと思ったのですが、本当にこうやるのは可能ですか?

アバター
shiro4ao
記事: 224
登録日時: 14年前
住所: 広島

Re: C言語でディレクトリを扱う

#2

投稿記事 by shiro4ao » 14年前

WindowsAPIですがFindFirstFileという関数はいかかでしょうか?
詳細:http://msdn.microsoft.com/ja-jp/library/cc429233.aspx

non
記事: 1097
登録日時: 14年前

Re: C言語でディレクトリを扱う

#3

投稿記事 by non » 14年前

環境によって,使えるものが違いますから,環境を書きましょう。
opendir って書いてあるからUNIXですかね?
non

アバター
shiro4ao
記事: 224
登録日時: 14年前
住所: 広島

Re: C言語でディレクトリを扱う

#4

投稿記事 by shiro4ao » 14年前

てっきりWindowsだと思ってしまいました。
申し訳ないです。

アバター
さかまき
記事: 92
登録日時: 14年前

Re: C言語でディレクトリを扱う

#5

投稿記事 by さかまき » 14年前

>本当にこうやるのは可能ですか?

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かも。環境は書かないとね

COFE
記事: 97
登録日時: 14年前

Re: C言語でディレクトリを扱う

#6

投稿記事 by COFE » 14年前

すいません、色々混乱させてしまったみたいですが環境はwindowsです
opendirっていう関数がほんとうにあるとは知らず適当に書いたんです
windows環境で上に示したことをするにはどうすればいいでしょうか?

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語でディレクトリを扱う

#7

投稿記事 by softya(ソフト屋) » 14年前

C言語の標準ライブラリには有りませんので、shiro4aoさんの書いたとおりWin32API(WindowsAPI)を使います。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

COFE
記事: 97
登録日時: 14年前

Re: C言語でディレクトリを扱う

#8

投稿記事 by COFE » 14年前

shiro4ao さんが書きました:WindowsAPIですがFindFirstFileという関数はいかかでしょうか?
詳細:http://msdn.microsoft.com/ja-jp/library/cc429233.aspx
softya(ソフト屋) さんが書きました:C言語の標準ライブラリには有りませんので、shiro4aoさんの書いたとおりWin32API(WindowsAPI)を使います。
うーん、やっぱりWIN32API使わなきゃいけませんか……
fopenとかはUNIXと互換性があるのにディレクトリはダメってヒドイですね(windowsのこっちが文句行っても仕方ないか)
それで考えたんですけどPerlでディレクトリを開く関数ってありますか?
C言語ではなくPerlでお願いします

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: C言語でディレクトリを扱う

#9

投稿記事 by softya(ソフト屋) » 14年前

それこそPerlならopendirがあるはずですが、LinuxとWinで同じ動作するかは覚えてません。Win32APIを避けるってことは両方で使いたいんですよね?

>fopenとかはUNIXと互換性があるのにディレクトリはダメってヒドイですね(windowsのこっちが文句行っても仕方ないか)
opendirはC言語では非標準関数ですので、あったらラッキー程度に考えてください。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

ISLe
記事: 2650
登録日時: 14年前
連絡を取る:

Re: C言語でディレクトリを扱う

#10

投稿記事 by ISLe » 14年前

COFE さんが書きました:fopenとかはUNIXと互換性があるのにディレクトリはダメってヒドイですね(windowsのこっちが文句行っても仕方ないか)
ファイルシステムが違うのだから仕方ありません。
標準ライブラリは互換性のある部分だけを持ってきてるわけですから。
COFE さんが書きました:それで考えたんですけどPerlでディレクトリを開く関数ってありますか?
C言語ではなくPerlでお願いします

コード:

opendir DIR, 'C:\\work' or die;
while ($dir = readdir DIR) {
	print "$dir\n";
}
closedir DIR;
#ActivePerlで動作確認しました。

(追記)
ウインドウズでもgccでdirent.h(の関数)が使えますね。
#Cygwin版で確認しました。

COFE
記事: 97
登録日時: 14年前

Re: C言語でディレクトリを扱う

#11

投稿記事 by COFE » 14年前

出来ました
ありがとうございます

COFE
記事: 97
登録日時: 14年前

Re: C言語でディレクトリを扱う

#12

投稿記事 by COFE » 14年前

解決付け忘れてました
やっぱりPerlは構文が楽ですね
教えてくださったみなさんありがとうございました

閉鎖

“C言語何でも質問掲示板” へ戻る