8

私のソフトウェアでは、複数の txt データベースを連続して読み取る必要があるため、最初に読み取ってから、そのファイルから取得した情報を使用して何かを行い、別のデータベースを開いて書き込みます。

ファイルを開くか作成するときにエラーが発生することがあり、その後、さまざまな関数、さまざまな変数、さまざまなファイルを使用する次のすべてのファイルを開く/作成するときにエラーが発生しました。

たとえば、2 つのファイルを使用する以下の関数を呼び出すと、"* error while opening file -%s- ..\n" というエラーが発生し、コード内の他のすべての fopen() がうまくいきません!

これは、1 つのファイルのコードの例です。

FILE *filea;
if((filea=fopen(databaseTmp, "rb"))==NULL) {
    printf("* error while opening file -%s- ..\n",databaseTmp);
    fclose (filea);
    printf("---------- createDatabaseBackup ----------\n");
    return -1;
}
int emptyFolder=1;
FILE *fileb;
if((fileb=fopen(databaseBackup, "ab"))==NULL) {
    printf("* error while opening file -%s- ..\n",databaseBackup);
    fclose (fileb);
    printf("---------- createDatabaseBackup ----------\n");
    return -1;
}
else {
    int i=0;
    char c[500]="";
    for (i=0;fgets(c,500,filea);i++) {
        fprintf(fileb,"%s",c);
        emptyFolder=0;
    }
} 
fclose(fileb);
fclose(filea);
4

3 に答える 3

9
  1. 特定のプロセスで開いているハンドルの数には上限があります。プログラムでハンドル リークが発生している可能性があります。

  2. ファイル作成中のエラーは通常、親フォルダーへのアクセス権がないことを意味します。

  3. これらのエラー ログ メッセージは、プログラムに属します。さらに充実させることができます。基本的にシステムコールであるerrnumため、OSによるセットがあります。fopenそのエラー番号を印刷して、問題に関する詳細情報を得ることができます。

于 2012-05-19T10:25:29.790 に答える
3

NULL が返された場合fopen、ファイルは開かれていないため、開いても意味がありませんfclose

于 2012-05-19T10:24:26.360 に答える
0

の戻り値fgetsが 0 かどうかを確認する必要があります。500 文字を読み取り、バッファーが null で終了していない場合、fprintf は割り当てられているよりも多くの文字を書き込もうとします。c

于 2012-05-19T10:24:21.283 に答える