2016-05-21 5 views
0

私の演習で私はCのおかげでフォルダを開く必要があります。私はdirentのライブラリでこれを実行した後、フォルダ内のすべてのファイルの名前を画面に表示することができます。しかし今、私は、スクリーンに印刷された現在のファイルを毎回開くようにしたい。だから私はfopenでこれを行いますが、私のfopenが私にNULLを返すたびに、現在のファイルを毎回開くために何ができるのですか? ありがとう!バイナリファイルを開く

void OpenDirectory(char *Folder, char *Virus){ 
DIR * dir = NULL; 
struct dirent* CurrentFile = NULL; 

dir = opendir(Folder); 
if (dir == NULL){ 
    perror(""); 
} 
else 
{ 
    while ((CurrentFile = readdir(dir))!= NULL) 
    { 
     if (!strcmp(CurrentFile->d_name, ".") || !strcmp(CurrentFile->d_name, "..")) 
     { 
      // Don't do anything 
     } 
     else 
     { 
      printf("Current file is : %s\n", CurrentFile->d_name); 
      Myfile(CurrentFile->d_name); 
     } 
    } 
} 


} 

void Myfile(FILE* File1){ 
File1 = fopen(File1, "rb"); 
printf("File is : %s", File1); 
if (File1 == NULL) 
{ 
    printf("The file source doesn't exist !\n"); 
} 
else 
{ 
    printf("Welcome"); 
} 
} 
+1

実際のプリントアウトを表示します。どのファイル指定が 'printf( "File is:%s"、File1);'によって出力されますか。明らかに、fopen()が機能するためには、これは有効な名前とPATHである必要があります。 –

+0

すべてのファイルを含むフォルダが自分のプログラムの同じディレクトリにないためにどうすればいいですか.c –

+0

ファイル名を含むフォルダ(strcat)の指定にファイル名を追加する必要があります。 –

答えて

1

ディレクトリにファイル名が含まれています

は、ここに私のコードです。

したがって、最初のファイル名はfooとなる可能性があります。これがdirentから抜け出すものです。だからあなたはそれを開こうとすると、効果的にfopen("foo", "r");をやっています。

しかし、これは、 "fooというファイルを現在の作業ディレクトリに開きます"という意味です。ファイルはいくつかのサブディレクトリにあるので、見つからないでしょう。

新しいディレクトリの作業を開始するたびに、1つの解決策がディレクトリにcwdになります。それはうまくいく。完了したらチャレンジは親ディレクトリに戻ります。

関連する問題