Я использую visual studio 2017
и работаю на С++. У меня есть код, в котором я получаю некоторый ввод от пользователя и на его основе пытаюсь удалить файл.
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, поэтому проблем с разрешением нет. Как я могу это решить. Спасибо
Согласно ошибке, remove()
ожидает строку C (const char*
), но вы предоставляете std::string
. Вы должны преобразовать std::string file
в строку C, используя file.c_str()
.
Ваша проблема в том, что std::remove
ожидает C-строку (const char *
). Вы можете использовать метод c_str()
из std::string
.
int res = remove(file.c_str());
Однако вы можете использовать более подходящий C++ std:: файловая система:: удалить (из C++17s библиотека файловой системы), чтобы сделать то же самое. Теперь, поскольку вы используете Visual Studio 2017, std::filesystem
не было еще полностью реализованы, и вы должны использовать экспериментальную версию. Чтобы сделать то же самое:
#include <filesystem>
// ...
std::experimental::filesystem::remove(file);
remove(file.c_str());