C++文件系统:如何删除具有非恒定名称文件

njthzxwz  于 2022-12-30  发布在  其他
关注(0)|答案(1)|浏览(123)

我有一个功能,从文件夹中删除一个文件"定居点"的名称。
我的代码:

void delete_settlement(string name){
     std::ostringstream oss;

     oss<<"settlements/"<<name<<".txt";
     string file_name = oss.str();
     std::ifstream file_exists;
        file_exists.open(file_name);

        //Если файл не существует, оповестить об этом пользователя
        if(!file_exists){
           cout << "File doesn't exist, it can not be deleted\n";
            std::ostringstream oss2;
            oss2<<"buffer_settlements/"<<name<<".txt";

        
        }

        else{

        std::filesystem::path tmp = std::filesystem::temp_directory_path();   
         cout << "NAME " << file_name << "\n";
         std::filesystem::path p = file_name;
         std::filesystem::remove(p);
        }

    }

我试过用file_name代替path instance,但也不起作用。这段代码只在路径是常量字符串时才起作用(即用常量字符串替换file_name)。要实现这个函数,我该怎么做?
我试过用不同的方法来表达文件的路径,但是没有一种方法起作用。我总是得到下面的运行时错误:第一个月

gmxoilav

gmxoilav1#

正如@RichardCritten和@john指出的,我必须在删除文件之前关闭它。
解决方案:

void delete_settlement(string name){
     std::ostringstream oss;

     oss<<"settlements/"<<name<<".txt";
     string file_name = oss.str();
     std::ifstream file_exists;
        file_exists.open(file_name);

        //Если файл не существует, оповестить об этом пользователя
        if(!file_exists){
           cout << "File doesn't exist, it can not be deleted\n";
            std::ostringstream oss2;
            oss2<<"buffer_settlements/"<<name<<".txt";

        
        }

        else{
            file_exists.close();

        std::filesystem::path tmp = std::filesystem::temp_directory_path();   
         cout << "NAME " << file_name << "\n";
         std::filesystem::path p = file_name;
         std::filesystem::remove(p);
        }

    }

相关问题