2016-05-11 10 views
0

Cでいくつかの同様の質問がありますが、私の質問には答えられません。
エラー:このようなファイルまたはディレクトリはありません。 ユーザー入力はaFile.txtであり、このファイルがプログラムと同じディレクトリに存在することを確認します。私の連結がOKであると信じて私をリードしても
パス名と変数ファイル名が有効でないfopen

input_file = fopen(".\aFile.txt", "r");<br/> 

ITワークス...
printf("path = %s\n", path);プリント.\aFile.txt

私は手動で変更した場合:

input_file = fopen(path, "r");<br/> 

に。 私は間違って何をしていますか?

char path[25] = "./"; 
    char filename[21]; 
    printf("Enter filename, max 20 characters: "); 
    fgets(filename, 20, stdin); 
    strcat(path, filename); 
    strtok(path, "\n"); // FIXED THE ISSUE BY REMOVING THE trailing '\n' 
    printf("path = %s\n", path); 

    FILE * input_file; 
    input_file = fopen(path, "r"); // fopen(".\aFile.txt", "r") works!!! 
    if (input_file == NULL) 
     perror("Error"); 
    else { 
     loader(list, input_file); 
     fclose(input_file); 
     printf("list loaded from file succesfully.\n"); 
    } 
+2

ほとんどの場合、パス変数に改行文字が含まれている可能性があります(fgetsにはそれが含まれています)。末尾の空白を削除すればうまくいくはずです。 – TheGreatContini

+2

[man fgets](http://linux.die.net/man/3/fgets): "改行が読み込まれた場合は、バッファに保存されます。" – kaylum

+1

確かに、重複しています...あなたがfgets \ n問題について知らなかったら...:p – Chris

答えて

2

これは新しい行です。新しい行にある:「」「:」::印刷されて何

printf("path = :%s:\n", path); 

がある

Server:junk Username$ ./a.out 
Enter filename, max 20 characters: test.txt 
path = :./test.txt 
: 
Error: No such file or directory 

注秒これを見るための良い方法は、先頭と末尾にファイル名を印刷します。

+0

ありがとう。それはまさに問題でした! – Chris

3

fgetsに改行文字が含まれている可能性が高いため、これが原因です。最後に改行を削除すると、改行が機能するはずです。