删除使用字符串变量创建的名称的文件

时间:2013-11-17 11:51:59

标签: c++ string file

我正在编写一个功能,可以让用户有机会更改他们的用户名。为此,我试图重命名存储其数据的文件。我想出了一个这样做的方法,但是我觉得我很接近。但是我觉得我很接近。

文件名最初是这样创建的 -

std::cout << "Please enter a username: ";
std::getline (std::cin, username);

std::ofstream fout (username + ".txt");

工作正常。然后如果他们以后选择更改用户名

std::cout << "Please type in your new username." << std::endl;
std::getline (std::cin, newUsername);

std::ofstream fout (newUsername + ".txt");
// I copied the contents of username.txt to newUsername.txt here

再次正常工作。

问题在于下面。

问题在于删除原始文件,更具体地说,在添加文件扩展名.txt

我已将#include包含在remove()功能中 并将.c_str()添加到用户名,因为我相信remover()只会接受C字符串(char *),而不是C ++字符串。

remove(username.c_str() + ".txt"); // error expression must have integral or enum type         referring to ".txt".

提前感谢每个人的时间

4 个答案:

答案 0 :(得分:4)

足够简单

remove((username + ".txt").c_str());

username + ".txt"的返回值称为临时(因为它是一个未命名的值),但没有任何内容表示您无法调用方法(如{{1} })在临时对象上。

答案 1 :(得分:0)

removeconst char*为参数,您无法使用const char*运算符将两个+加在一起。因此,解决方案是将它们添加为字符串,然后在结果上调用c_str()

remove((username + std::string(".txt")).c_str());

答案 2 :(得分:0)

你的问题在于:

remove(username.c_str() + ".txt"); // error expression must have integral or enum type         referring to ".txt".

添加两个char* s不会生成string

这可能是更好的方法:

auto filename = username + ".txt"
remove(filename.c_str())

答案 3 :(得分:0)

你的问题在于:

remove(username.c_str() + ".txt"); // error expression must have integral or enum type         referring to ".txt".

添加两个const char* s不会产生(std::)string

这可能是更好的方法:

auto filename = username + ".txt"
remove(filename.c_str())

请注意,这会生成一个 relative 文件名,而绝对文件名可能会更好,具体取决于调用它的方式。