删除fopen成功创建的文件时权限被拒绝

时间:2013-11-27 08:53:08

标签: c++ file

这是一个从用户获取文件夹名称,创建文本文件并稍后应删除它的函数。

void function(string LogFolder)
{
     fopen((LogFolder+"/test.txt").c_str(),"w");
     cout<<"The errorno of fopen "<<errno<<endl;
     remove((LogFolder+"/test.txt").c_str());
     cout<<"The errorno of remove "<<errno<<endl;
}

输出:
fopen 0的错误号[表示文件已成功创建。]
删除错误13 [意味着权限被拒绝]

如您所见,该文件夹已成功删除 A link to understand error codes

4 个答案:

答案 0 :(得分:3)

您需要先关闭文件:

void function(string LogFolder)
{
     // Acquire file handle
     FILE* fp = fopen((LogFolder+"/test.txt").c_str(),"w");

     if(fp == NULL) // check if file creation failed
     {
          cout<<"The errorno of fopen "<<errno<<endl;
          return;
     }

     // close opened file
     if(fclose(fp) != 0)
     {
         cout<<"The errorno of fclose "<<errno<<endl;
     }


     if(remove((LogFolder+"/test.txt").c_str()) != 0)
     {
          cout<<"The errorno of remove "<<errno<<endl;
     }
}

答案 1 :(得分:2)

对于初学者,您不是创建和删除文件夹,而是文件夹中名为test.txt的文件。

您的问题是您需要先关闭该文件,然后才能删除它。请尝试以下

void function(string LogFolder)
{
    FILE* myFile = fopen((LogFolder+"/test.txt").c_str(),"w");
    cout<<"The errorno of fopen "<<errno<<endl;
    fclose( myFile );
    cout<<"The errorno of fclose "<<errno<<endl;
    remove((LogFolder+"/test.txt").c_str());
    cout<<"The errorno of remove "<<errno<<endl;
}

答案 2 :(得分:1)

您可能需要设置文件夹的执行权限以及写入权限。

答案 3 :(得分:1)

这是因为文件仍处于打开状态。在删除文件夹之前,您应fclose()。 像

这样的东西
void function(string LogFolder)
{
     FILE *fp = fopen((LogFolder+"/test.txt").c_str(),"w");
     cout<<"The errorno of fopen "<<errno<<endl;
     fclose(fp);
     remove((LogFolder+"/test.txt").c_str());
     cout<<"The errorno of remove "<<errno<<endl;
}