我正在使用visual studio 2017
并在c ++中工作。我有从用户那里获取一些输入的代码,并基于此我试图删除文件。
auto ver = FLAGS_ver; // taking input from the user
string file = "C:\\Program Files(x86)\\data_" + ver + "\\output\\output.json";
std::ofstream output_file(outputFile);
基本上ver
是一个数字,基于该数字可以访问特定目录。因此,最终string file
变为:
C:\\Program Files(x86)\\data_209\\output\\output.json
所以我需要删除正在使用以下命令的上述文件:
int res = remove(file);
但是显示以下错误:
Error (active) E0304 no instance of overloaded function "std::remove" matches the argument list
Error C2664 'int remove(const char *)': cannot convert argument 1 from 'std::string' to 'const char *'
我能够写入此json文件,因此权限没有问题。我该如何解决。谢谢
答案 0 :(得分:2)
您的问题是std::remove
需要C字符串(const char *
)。您可以使用c_str()
中的std::string
方法。
int res = remove(file.c_str());
但是,您可以使用更合适的C ++ std::filesystem::remove(来自C ++ 17s filesystem library)来执行相同操作。现在,由于您使用的是Visual Studio 2017,因此std::filesystem
不是yet fully implemented,因此必须使用实验版本。要实现相同的目的:
#include <filesystem>
// ...
std::experimental::filesystem::remove(file);