如何使用FILE*fp调用函数关闭文件

dma*_*ect 0 c c++ function fclose file-pointer

在主要我创建一个文件指针,将其传递给一个函数来打开它,我想有一个单独的函数来关闭文件,但我无法关闭该文件.我错过了什么?

我没有收到错误,但我检查的方式表明文件没有关闭.

感谢您的帮助.

 int _tmain(int argc, _TCHAR* argv[])
{
    FILE *inFile, *outFile;
    FileOpen(&inFile, &outFile);
    FileClose(&inFile, &outFile);

    getch();
    return 0;
}

void FileOpen(FILE **inFile, FILE **outFile)
{
//--Open InFile--------------------------------
    if ((*inFile = fopen("a.txt","r")) == NULL){
        printf("\nError Opening File. ");
        exit(0);
    }
    else {
        printf("File Opened\n");
         }

//--Open OutFile--------------------------------
    if ((*outFile = fopen("b.txt","w")) == NULL){
        printf("\nError Opening File. ");
        exit(0);
    }
    else {
        printf("File Opened\n");
         }
}


void FileClose(FILE **inFile, FILE **outFile)
{
//--Close InFile----------
    if (fclose(*inFile)){
        printf("File Closed\n");
    }
    else {
         printf("\nError Closing InFile File. ");
    }

//--Close outFile---------
    if (fclose(*outFile)){
        printf("File Closed\n");

    }
    else {
         printf("\nError Closing OutFile File. ");
    }
 }
Run Code Online (Sandbox Code Playgroud)

Ker*_* SB 6

您误解了返回值:成功时fclose返回0 ,因此您需要检查.if (fclose(*inFile) == 0)

  • @NeilButterworth:这是其中一个难题.没有一个最佳答案,这取决于您的用例:如果数据是可选的(如临时日志),您可以忽略该错误.如果数据很关键,你可以"中止()`你的进程(因此更高级别的协议会重试,也许在其他地方).或者您可以拥有进程内处理逻辑(例如询问用户).文件不是内存或互斥体的资源,你无法无条件地"释放"它们.错误表明外界存在问题,您的答案取决于您与外界的关系. (2认同)