Удаление строки из файла с++
1234567891011121314151617181920212223242526272829303132333435363738
void remove_folder(){
string path_folder_for_txt = "C:\\Users\\Artem\\db\\db_";
string file_name = "folders.txt";
string full_path = path_folder_for_txt + "\\" + file_name;
std::ifstream input_file(full_path);
if (!input_file.is_open()) {
std::cerr << "Не удалось открыть файл!\n" << full_path << std::endl;
managment();
}
std::string search_string;
std::cout << "Введите путь до папки в формате path/to/folder для удаления: \n";
cin >> search_string;
std::string line;
std::ofstream output_file(full_path);
while (std::getline(input_file, line)) {
if (line != search_string) {
output_file << line << std::endl;
}
}
input_file.close();
output_file.close();
if (std::remove(full_path.c_str()) != 0) {
cout << "Не удалось удалить файл!\n" << full_path;
managment();
}
if (std::rename(full_path.c_str(), "folders.txt") != 0) {
cout << "Не удалось переименовать файл!\n";
managment();
}
std::cout << "Путь успешно удален!\n";
managment();
}
Возникает ошибка "Не удалось переименовать файл!" и файл удаляется. Нужно, чтобы название файла осталось таким же. Прошу помощи!
По дате
По рейтингу
Ошибка в том, что full_path.c_str() - содержит полный путь к файлу, а выражение в скобках - только название файла.
сделайте
1
string new_file_full_path = path_folder_for_txt + "\\" + "folders.txt";
И используйте его в ренейме
1
if (std::rename(full_path.c_str(), new_file_full_path.c_str()) != 0)
Для переименования файла в С++ можно использовать функцию rename из библиотеки cstdio. Вот пример кода, который переименует файл old_name.txt в new_name.txt:
123456
#include <cstdio>
int main() {
std::rename("old_name.txt", "new_name.txt");
return 0;
}
В вашем случае, вам нужно изменить имя файла на folders.txt. Вот пример кода, который переименует файл old_name.txt в folders.txt:
123456
#include <cstdio>
int main() {
std::rename("old_name.txt", "folders.txt");
return 0;
}
Больше по теме