C remove()函数不起作用

时间:2015-08-21 19:18:57

标签: c windows command-prompt stdio file-pointer

我试图在Windows系统上实现我在Mac上编写的程序,并且我在最后一个函数中遇到了很多麻烦:

/* clearFiles */
//  deletes the section files after the program has executed
//  skips any sections listed table that don't appear in the body (b/c no file was written for these)
//  also deletes the table & body files
void clearFiles(section_t *tableArray, int *skipArray, char *tableName, char *bodyName)
{
    int i, status, index;
    char str[SECTNAME];
    char command[SECTNAME];

    index = 0;

    //  clear section files
    for(i=1; tableArray[i].count!=0;i++)
    {
        if(i!=skipArray[index])
        {

            strcpy(str, tableArray[i].shortName);
            strcat(str,".txt");

            status = remove(str);
            if(status!=0)
                printf("Warning! File %s not deleted.\n", str);

        } else index++;
    }

    //  clear table file
    status = remove(tableName);
    if(status!=0)
        printf("Warning! File %s not deleted.\n", tableName);

    //  clear body file
    status = remove(bodyName);
    if(status!=0)
        printf("Warning! File %s not deleted.\n", bodyName);
}

程序需要一个非常大的文件,然后首先将其拆分为目录文件和正文文件。然后它接收主体并将其分成数百个单独的部分文件,从中执行程序的实际任务。最后,我希望它删除所有这些额外的文件,因为它们只会使目录混乱。它在我的Unix Mac环境中完美运行,但当我尝试在PC上的命令提示符下运行它时,我的remove()函数为每个部分文件返回-1并且不会删除它(但是,它确实成功了删除表格和正文文件)。我还使用system(del fileName)尝试了一种更强力的方法,但这也没有用,因为它说该文件正由另一个进程使用。我无法弄清楚为什么这些文件可能会打开,因为每次fopen()出现时,我都会用fclose()跟进它。例外情况是在检查文件是否打开时,我使用

if(fopen(fileName,"r")!=NULL){}

这可能是问题吗?有没有办法检查文件是否打开而没有实际打开它,或者有没有办法关闭以这种方式检查的文件?我尝试为它分配一个虚拟指针并编码:

dummy = fopen(fileName, "r");
if(dummy!=NULL){}
fclose(dummy);

但这也没有奏效。是否可以只将文件路径传递给fclose()函数(例如,类似于fclose(C:\ users \ USER \ desktop \ fileName.txt)?另外,我知道程序正在尝试删除更正fileName,因为我的错误消息会在命令提示符下输出正确的名称。

非常感谢任何输入!感谢。

注意:    tableArray从1开始,因为在程序中实现了一个搜索函数,如果找到则返回索引,如果找不到则返回0。事后看来,如果找不到则返回-1会更好,并将索引设为零,但这是一个单独的问题

更新:

以下是用于创建部分文件的代码:

if(fopen(word, "r")==NULL){
    ofile = fopen(word, "w");

    fprintf(ofile, "SECTION %s ", section);

    //go until end of file or until found the next section
    //  bug fix: check the section after that, too (in case the next section isn't there)
    while(fscanf(spec, "%s", word)!=EOF && !cease)
    {
        if(strcmp(word,"SECTION")!=0){
            fprintf(ofile, "%s ", word);
        }
        else{
            fscanf(spec, "%s", word);
            choice = testNumber(spec,word);
            for(j=i+1; tableArray[j].count!=0;j++)
                if(strcmp(word,tableArray[j].shortName)==0)
                    cease = 1;
        }
    }

    fclose(ofile);
}

0 个答案:

没有答案