プロが教える店舗&オフィスのセキュリティ対策術

C言語で同一ディレクトリから複数のファイルを順番に読み込んでいきたいのですが、うまくいきません。
シェルで、ファイル名の取得を行っていっています。
shell
----
ls /home/data > /home/src/infile.txt
----
C
-----------------------------
FILE *fp;
char y[30]="/home/data/";
// ↓aには上記シェルにて取得した1件目のファイル名が入っています。
strcat(y,a);
// ↓ここでは絶対パスが正しく表示されます
printf("ddd:%s\n",y);
// ddd:/home/data/11.txt
// ↓ここでfile open errorで一件目で終了してしまいます。
if ((fp = fopen(y,"r")) == NULL){
printf("file open error!!\n");
exit(1);
}
-----------------------------
このようなファイルの読込みのやり方ができるのか教えてください。
もしできるのであるのなら、そのやり方も教えてください。
わかりにくい文章ですが、お願いします。

A 回答 (6件)

こんにちわ。



shell の出力結果をC から拾うよりも、
opendir()/readdir() 等を使った方が楽ですょ。
その方が、移植性も高いし・・・。

参考URL:http://h30097.www3.hp.com/docs/i18n/japan/Single …
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
別の方法でとりあえずは動きました。
opendirの使い方は後日勉強して挑戦してみたいと思います。
ありがとうございました。

お礼日時:2003/07/04 11:05

"11.txt"なら 6 が正解ですよ

    • good
    • 0
この回答へのお礼

改行コードが入ってました。
改行コードを変換して直りました。
ありがとうございました。

お礼日時:2003/07/04 11:02

 「/home/data/11.txt」ですか、「home/data/11.txt」ですか?先頭にスラッシュがあるのとないのとでは、全然違うディレクトリをさしますよ?



#レス不要

if ((fp = fopen("home/data/11.txt","r")) == NULL)
---------
正しく内容が取得できるので、アクセス権に関しては問題ないと思います。
=======================
char y[30]="/home/data/";
strcat(y,a);
printf("ddd:%s\n",y);
// ddd:/home/data/11.txt
    • good
    • 0

予想なんですけど



aが"11.txt"ではなく"11.txt   "
という具合になっていないか確認してください

あと
strcat(y,a);



y[0]='\0';
strcat(y,"/home/data/");
strcat(y,a);

のようにしないと
ループさせたら、すんごいことになりますよ
    • good
    • 0
この回答へのお礼

回答ありがとうございました。
aの部分ですが、strlenで見たところ、7になっているので問題はないと思います。
yの部分は直しました。
ありがとうございます。

お礼日時:2003/07/03 17:36

C言語のfopen()を使用して、エラーになっているので


あれば、まず、errnoを確認してみてはどうですか?
そうすれば、どういったエラーが発生しているかは
一目瞭然です、errno変数に、エラー番号が入っているので
errno.hのファイルで該当する番号をみてみれば、エラー
番号の横にコメントでどういったエラーなのかかかれていると
思います。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
ERRNOは2で、
/* No such file or directory */
でした。

お礼日時:2003/07/03 17:33

こんにちは。



 まず、aliasと打って、lsコマンドに余分な別名が付いていないか確認してください。付いている場合、\lsとして、aliasをパスします。"alias ls 'ls -F'"などとしてあると、*などの余分な文字がくっつきます。また、厳密には"\ls -1 >"とします。-1は、1カラムで表示するというオプションです。

 次にyの配列数ですが、PATH_MAXという定数がありますので、こちらを使用してください。

 それから数件表示/オープンするのであれば、strcatでyに連結すると、次のデータはどうなると思いますか?

 オープンが失敗する理由ですが、viコマンドでそのファイルをオープンできますか?つまり、実行ユーザにリードのアクセス権がありますか?また、デバッガで止めて、確実に目的のファイルを指していることを確認してください。

 最後に、「プログラミング言語C」第2版はお持ちでないですか?
http://www.pro.or.jp/~fuji/computerbooks/c/c.ker …
お持ちでないなら、本屋に急行してください。C言語を作った人によるC言語の本で、「Cのバイブル」、「KR本」とも言われるものです。この中に、外部コマンドからファイル名をもらわなくても、ディレクトリの内容を再帰的に表示するプログラムの例があります。
    • good
    • 0
この回答へのお礼

すばやい回答ありがとうございます。
C言語は一昨日より始めたばかりなので質問しました。
aliasについては問題なさそうです。

PATH_MAXの方は現在調べています。

オープン失敗の事ですが、プログラムで直接パスを送ると
---------
if ((fp = fopen("home/data/11.txt","r")) == NULL)
---------
正しく内容が取得できるので、アクセス権に関しては問題ないと思います。

C言語の本は今日買いに走ろうと思ってます。

お礼日時:2003/07/03 16:10

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!