Top.Mail.Ru
Ответы

Удаление строки из файла с++

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; 
}