データをファイルに繰り返し追加するコードがあり、次のようになります。
for(int i=0; i<number; i++){
FILE *log_file;
char name[50];
sprintf(name,"something_%d.log",i);
log_file=fopen(name,"a");
if(log_file == NULL){
printf("ERROR cannot open file %s",name);
abort();
}
/* Write stuff to file */
fclose(log_file);
}
簡単そうですね。ファイルが存在し、書き込み権限がある場合は、通常どおり続行します。ファイルが存在せず、ディレクトリにファイルを書き込む権限がある場合は、通常どおりファイルが作成されます。間違い!どういうわけか、私が特定のファイル名()に出くわしたときMINI_3f_1_0.log
、プログラムはファイルを作成/開くことができず、を生成しますlog_file = NULL
。明らかに、これは私のコード全体ではありません。最悪のことは、示されているような単純なプログラムではこの問題を再現できないことです。
私はすでに何が起こっているのかを追跡するために数時間を費やしました、そして今のところ私は次のことを100%確信しています:
- ファイルは同じスコープ内で宣言され、開かれ、閉じられます
- 同じ名前のファイルが他の関数/プログラム全体で開かれていません
- ディレクトリの読み取り/書き込み権限があります
- 反復順序からファイルを開こうとすると、同じルーチンで実行したときに同じエラーが発生します
あなたたち/ギャルが私に与えることができるどんなガイダンスでも大いにありがたいです。あなたの経験でこのようなものに出くわした場合、どのようにそれを修正しましたか?