剪切字符串时,为什么rename函数不起作用?

问题描述

我正在处理文件。目前,我正在重命名一些我对fstream有点了解的文件。我只想使用循环顺序重命名多个文件。为什么此代码不起作用?还有其他方法吗?我只想做我的工作。感谢您阅读

#include <iostream>
#include <cstdio>

using namespace std;

int main()
{

// not working
for(int i=1;i<=20;i++;){
 
 rename(("oldname"+to_string(i)+"txt"),((newname+to_string(i)+"txt"));



}
    
return 0;
}

解决方法

std::rename带有两个类型为const char *的参数。但是字符串串联的结果是std::string。您可以使用.c_str()来访问基本的C样式字符串,如下所示:

auto oldFileName = "oldname" + to_string(i) + "txt";
auto newFileName = newname + to_string(i) + "txt";

rename(oldFileName.c_str(),newFileName.c_str());

但是它比这容易得多:rename是C语言的遗物。在C ++中,您应该使用std::filesystem::rename(如果可以使用C ++ 17)。一个优点是,in可以与std::string一起使用。