Невозможно удалить файл с полным путем в С++

Я использую 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(file.c_str());
user1810087 31.05.2019 09:06

Согласно ошибке, remove() ожидает строку C (const char*), но вы предоставляете std::string. Вы должны преобразовать std::string file в строку C, используя file.c_str().

Scheff's Cat 31.05.2019 09:06
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
53
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ваша проблема в том, что 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);

Другие вопросы по теме