下のプログラムなのですが、
色々と調べていくとfindnext();でフリーズしてしまうことがわかりました。
しかし、なぜフリーズするのかわからないのです。
dir.hの書いてある通りに使っているつもりなのですが・・・
助言お願いいたします。
仕事にいるので早急にお願いいたします。

ちなみにコンパイラはBC4.5++です。

/*****************************************************************/
test.c
/*****************************************************************/
#include <stdio.h>
#include <dir.h>
#include <string.h>

#define MAX 10

int main(){
structffblk*data;
inti;
charname[MAX];
charpath[MAX];

strcpy(path,"c:\\*.*");

if(findfirst(path,data,0)==0){
while(1){
strcpy(name,data->ff_name);
printf("%s",name);
if(findnext(data)!=0)break;
}
}

return 0;
}

このQ&Aに関連する最新のQ&A

A 回答 (4件)

ディレクトリはattribに指定しないといけません。


ヘルプを見てください。
または、dir.hを覗いてみて下さい。

#include <dir.h>
int findfirst(const char *pathname, struct ffblk *ffblk, int attrib);

ここの最後の引数attribをしていてください。
つぎのように定義してあるようです。
FA_DIRECディレクトリ
では、
    • good
    • 0
この回答へのお礼

お返事有難うございます。
何とかできるようになりました。
これって、コンパイラのヘルプに細かく載っているのですね。
大変有難うございます。

お礼日時:2001/11/25 09:58

朝から、Cの勉強とは関心ですネ!


10年前まではチョコチョコとCで書いていましたが、
今は引退しています。
自信はありませんが、

次の文
>strcpy(path,"c:\\*.*");

"c:\\*.*"をそのパス名にして下さい。

この回答への補足

お返事有難うございます。
やってみたのですが出来ませんでした。
Cドライブのルートなら
"C:\\"
でよろしいのでしょうか?

補足日時:2001/11/25 08:27
    • good
    • 0

#define MAX 10



この大きさは大丈夫でしょうか?
普通は
#define MAX 256
と大きめに書くようですが?

findnext();はANCI Cではないのでしょうか?
Win32 Nt専用です。

この回答への補足

有難うございます。
MAX値を多くすると動きました。

あと、ついでにですが、あるディレクトリ下にある、
ディレクトリ名を参照するにはどうしたらよいでしょうか?

findnext();はどうやらファイル名の取得の見みたいでしたので、
実際には、ディレクトリを取得したいのですが、何かありませんでしょうか?

補足日時:2001/11/25 07:53
    • good
    • 0

構造体がポインタで宣言されていて、実体がないからではないですか?


まずそこから修正してみましょう。
あとは、直値(0等)ではなく、定義された値を使いましょう。

この回答への補足

すみませんが、具体的にどういうことでしょう?

関数はディレクトリの値を返すだけのものだと思っていたのですが、
違うのでしょうか?

findfirst();から値を引き取ってきているのだと思っていたのですが・・・

ひょっとして、
findnext();はANCI Cではないのでしょうか?
ANSI Cだと聞いてやっているのですが違うのでしょうか?

もし違うのなら、ANCI Cでディレクトリ名や、
ファイル名を取得する方法があれば教えていただけませんでしょうか?

補足日時:2001/11/25 07:11
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qファイルやディレクトリの存在確認を行う方法

ファイルをオープンするのはfopenでOKですが、ファイルやディレクトリの存在確認を行う方法が知りたいです。

何か組み合わせて作るものなのでしょうか?
perlとか便利な演算子があるのですが、C/C++って器用ではないですね。
これは処理系?依存の内容ですか?

私の環境は VC6, VC2005 Windows2000です。

Aベストアンサー

int access(const char* path, int mode);
int stat(const char* path, struct stat* sb);

かな?
MSDN を引くと _access_s() を使えとか書いてあるけど。

QC言語にてプログラミングを行っていて、FindFirstFileにてフ

C言語にてプログラミングを行っていて、FindFirstFileにてファイル名を取得しようとしていますがうまくいきません。

第一引数に「D:\test\aaa*」と指定して、aaa01、aaa02、aaa03のようなファイル名が取得したいと考えています。

FindFirstFileの戻り値として、INVALID_HANDLE_VALUEがくるため目的の動作になりません。

上記のような事はできないのでしょうか?

いろいろ調べてみましたが解決できなくて質問させていただきました。

以上ですが、よろしくお願いいたします。

Aベストアンサー

バカにしているようで申し訳ないですがもう一度設定周りを見直してみてはいかがてしょう?
良くあるケースだと。
1. INIに記述したPATHが間違えてる
2. INIからPATHを取得できてない
3. ほんとに存在しない。
ですね。

1.と2.については、INIから取得したPATHを printf() 等にて出力して
その出力されたPATHを dir コマンドに渡してあげるコトで確認できると思います。
手入力じゃなくてコピペするようにしてください。

あとINIに指定したものを取得してFileFindFirstにわたすのなら\のエスケープは不要です。
エスケープはコンパイラの都合ですから。。
1.2.3.やってもだめなら、他の回答にあるように GetLastErrorから終了の原因を突き止めるしかありませんね。


人気Q&Aランキング

おすすめ情報