Вот один метод:
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
int deleteAtLine(const std::string file_name, std::vector::size_type lineNumber){
//the memory storage medium
std::vector<std::string> lines;
//Reading the file to the storage
{
//opening the file for reading from it
std::ifstream file(file_name);
//checking if the file has been opened correctly
if (not file.is_open()) {
std::cerr << "can't open the file " << file_name << std::endl;
return -1;
}
//Reading
for (std::string one_line; std::getline(file, one_line);lines.push_back(one_line));
}
//Writing the storage to the file
{
//opening the file for writing to it
std::ofstream file(file_name);
//checking if the file has been opened correctly
if (not file.is_open()) {
std::cerr << "can't open the file " << file_name << std::endl;
return -1;
}
//finding out the number of the lines
const auto lines_count = lines.size();
//writing
for (std::string::size_type lines_counter(0); lines_counter < lines_count;){
//checking the line number and writing the extra line if it is needed
if(lines_counter != lineNumber) file << lines[lines_counter++] << std::endl;
}
}
//returning 0 if there was no error to this stage
return 0;
}
Сначала вы открываете файл для чтения:
//opening the file for reading from it
std::ifstream file(file_name);
//checking if the file has been opened correctly
if (not file.is_open()) {
std::cerr << "can't open the file " << file_name << std::endl;
return -1;
}
, затем читаете все строки файла и сохраняете их в векторе:
//Reading
for (std::string one_line; std::getline(file, one_line);lines.push_back(one_line));
после закрытия предыдущей (доступной только для чтения) версии файла вы снова открываете его для записи, на этот раз:
//opening the file for writing to it
std::ofstream file(file_name);
//checking if the file has been opened correctly
if (not file.is_open()) {
std::cerr << "can't open the file " << file_name << std::endl;
return -1;
}
, затем возвращаете все строки, кроме нужной:
for (std::string::size_type lines_counter(0); lines_counter < lines_count;){
//checking the line number and writing the extra line if it is needed
if(lines_counter != lineNumber) file << lines[lines_counter++] << std::endl;
}
Вы можете использовать эту функцию следующим образом:
int main(int argc, char* argv[]) {
std::string file_name;
std::string::size_type lineNumber;
std::cin >> file_name;
std::cin >> lineNumber;
return deleteAtLine(file_name, lineNumber);
}
Удачи!