尽管使用了 fclose(),文件并没有关闭,因此我不能使用 remove() 函数
despite using fclose(), the file doesn't get closed and as a result i can't use the remove() fonction
正如我在标题中所说。这就是我的程序的启动方式:我调用此函数来创建一个文件(如果它以前不存在),如果它确实存在,它将获取文件中的信息并将它们存储到我创建的结构中。
您将在下面找到代码。
但这是我仍然找不到解决方案的部分,如果我删除所有文件并启动程序,该文件将被创建,我同时进入该文件夹,我可以自己删除它们没问题(程序仍在后台运行)。
所以问题是 not
在文件关闭的 first IF
处。
但是当我在文件已经存在的情况下再次启动程序时(因此程序将进入 ELSE IF
并收集数据)这里开始出现问题,当我启动程序并同时转到文件夹尝试删除手动打开文件弹出一条错误消息,告诉我该文件正在程序中打开(该程序仍在后台运行)。尽管我正在使用 fclose(fc).
那么我的脚本哪里出了问题呢?我真的花了几天时间试图解决这个问题。我需要解决,因为接下来在我的程序中我需要能够删除文件(所以我可以用他的名字命名另一个文件)
这是脚本
int file_fc(classe c[])
{
FILE * fc;
int count=0;
char buffer[500];
if ((fc=fopen("Fclasse.txt","r"))==NULL)
{
fc=fopen("Fclasse.txt","w");
fprintf(fc,"Code Classe Libellé Classe Spécialite Capacité\n");
fclose(fc);
fclose(fc);
}
else
{
fc=fopen("Fclasse.txt","r");
{
fgets(buffer,300, fc);
fgets(buffer,300, fc);
while(feof(fc) == 0)
{
sscanf(buffer,"%11d %16s %16s %5d",&c[count].code, c[count].lib, c[count].spec, &c[count].capa);
count++;
fgets(buffer,300, fc);
}
}
fclose(fc);
}
return (count);
编辑:::
将脚本更改为此
fc=fopen("Fclasse.txt","r");
if (fc==NULL)
{
fc=fopen("Fclasse.txt","w");
fprintf(fc,"Code Classe Libellé Classe Spécialite Capacité\n");
fclose(fc);
}
else
{
fgets(buffer,300, fc);
fgets(buffer,300, fc);
while(feof(fc) == 0)
{
sscanf(buffer,"%11d %16s %16s %5d",&c[count].code, c[count].lib, c[count].spec, &c[count].capa);
count++;
fgets(buffer,300, fc);
}
}
fclose(fc);
并且运行良好。
如果我像以前那样做,我仍然不明白
if(fc=fopen("fclasse.txt","r")==NULL)
我应该把 fclose() 放在哪里?在 if?在函数的末尾??
或者我只是需要计算打开文件的次数,最后在关闭文件之前,我写 Fclose() 的次数与打开的次数一样多(我的意思是我放置 fclose 的地方没有'没关系)??
您打开文件三次,丢弃了两个打开的对象。然后你只关闭一次。其他两个保持打开状态,直到程序关闭。
您在 if
中第一次打开它,然后在 else if
中再次打开它,然后在块内第三次打开它。只有第一个应该在那里。
我没有检查你的整个代码,但至少这里有一个问题:
else if ((fc=fopen("Fclasse.txt","r"))!=NULL)
{
fc=fopen("Fclasse.txt","r");
您打开文件两次,第一次是在 if
条件下,第二次是在覆盖 fc
.
之后
你更想要这样的东西:
else
{
fc = fopen("Fclasse.txt", "r");
if (fc != NULL)
{
// work with fc
}
...
正如我在标题中所说。这就是我的程序的启动方式:我调用此函数来创建一个文件(如果它以前不存在),如果它确实存在,它将获取文件中的信息并将它们存储到我创建的结构中。 您将在下面找到代码。
但这是我仍然找不到解决方案的部分,如果我删除所有文件并启动程序,该文件将被创建,我同时进入该文件夹,我可以自己删除它们没问题(程序仍在后台运行)。
所以问题是 not
在文件关闭的 first IF
处。
但是当我在文件已经存在的情况下再次启动程序时(因此程序将进入 ELSE IF
并收集数据)这里开始出现问题,当我启动程序并同时转到文件夹尝试删除手动打开文件弹出一条错误消息,告诉我该文件正在程序中打开(该程序仍在后台运行)。尽管我正在使用 fclose(fc).
那么我的脚本哪里出了问题呢?我真的花了几天时间试图解决这个问题。我需要解决,因为接下来在我的程序中我需要能够删除文件(所以我可以用他的名字命名另一个文件) 这是脚本
int file_fc(classe c[])
{
FILE * fc;
int count=0;
char buffer[500];
if ((fc=fopen("Fclasse.txt","r"))==NULL)
{
fc=fopen("Fclasse.txt","w");
fprintf(fc,"Code Classe Libellé Classe Spécialite Capacité\n");
fclose(fc);
fclose(fc);
}
else
{
fc=fopen("Fclasse.txt","r");
{
fgets(buffer,300, fc);
fgets(buffer,300, fc);
while(feof(fc) == 0)
{
sscanf(buffer,"%11d %16s %16s %5d",&c[count].code, c[count].lib, c[count].spec, &c[count].capa);
count++;
fgets(buffer,300, fc);
}
}
fclose(fc);
}
return (count);
编辑::: 将脚本更改为此
fc=fopen("Fclasse.txt","r");
if (fc==NULL)
{
fc=fopen("Fclasse.txt","w");
fprintf(fc,"Code Classe Libellé Classe Spécialite Capacité\n");
fclose(fc);
}
else
{
fgets(buffer,300, fc);
fgets(buffer,300, fc);
while(feof(fc) == 0)
{
sscanf(buffer,"%11d %16s %16s %5d",&c[count].code, c[count].lib, c[count].spec, &c[count].capa);
count++;
fgets(buffer,300, fc);
}
}
fclose(fc);
并且运行良好。 如果我像以前那样做,我仍然不明白
if(fc=fopen("fclasse.txt","r")==NULL)
我应该把 fclose() 放在哪里?在 if?在函数的末尾??
或者我只是需要计算打开文件的次数,最后在关闭文件之前,我写 Fclose() 的次数与打开的次数一样多(我的意思是我放置 fclose 的地方没有'没关系)??
您打开文件三次,丢弃了两个打开的对象。然后你只关闭一次。其他两个保持打开状态,直到程序关闭。
您在 if
中第一次打开它,然后在 else if
中再次打开它,然后在块内第三次打开它。只有第一个应该在那里。
我没有检查你的整个代码,但至少这里有一个问题:
else if ((fc=fopen("Fclasse.txt","r"))!=NULL)
{
fc=fopen("Fclasse.txt","r");
您打开文件两次,第一次是在 if
条件下,第二次是在覆盖 fc
.
你更想要这样的东西:
else
{
fc = fopen("Fclasse.txt", "r");
if (fc != NULL)
{
// work with fc
}
...