fopen c有多个文件

时间:2012-05-19 10:18:34

标签: c fopen

在我的软件中,我必须以串行的方式读取多个txt数据库,所以我先阅读第一个,然后我使用从该文件中获取的信息做一些事情,而不是打开另一个来编写等等。

有时我在打开或创建文件时出错,然后在以下所有打开/创建时出现错误,它使用不同的函数,不同的变量,不同的文件。

所以例如我调用下面的函数,它使用了两个文件,我得到一个错误“*打开文件时出错 - %s- .. \ n”,然后我的代码中的所有其他fopen()出错了!

这是一个单个文件的代码示例:

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);

3 个答案:

答案 0 :(得分:9)

  1. 给定流程的打开句柄数有一个上限。你的程序可能有漏洞吗?

  2. 创建文件时出错通常意味着您没有父文件夹的访问权限。

  3. 这些错误日志消息属于您的程序。你可以进一步增强它。由os设置errnum fopen本质上是系统调用。您可以打印该错误编号并获取有关您的问题的更多信息。

答案 1 :(得分:3)

如果fopen返回NULL,则文件未打开,因此尝试fclose没有意义。

答案 2 :(得分:0)

除了是否为0之外,您应该检查fgets的返回值。如果它读取500个字符且缓冲区未以空值终止,则fprintf将尝试写入比为c分配的字符更多的字符