プロが教えるわが家の防犯対策術!

下のプログラムなのですが、
色々と調べていくと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;
}

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が見つからない時は、教えて!gooで質問しましょう!