Как я могу удалить строку из текстового файла в C ++? - PullRequest
0 голосов
/ 19 ноября 2018

Я хочу удалить строку моего текстового файла, не заменяя ее на "". Как примечание: в моем файле есть новые строки. Итак, у меня есть более одной строки (например, таблица)

void Data::delete_line(const string& idNr) {
    ifstream list;
    string readFile, id;
    list.open("list.txt", ios::app);

    if (list.is_open()) {
        while (getline(list, readFile)) {
            int pos = readFile.find(';');
            id = readFile.substr(0, pos);
            if (idNr == id) {
                //deleting the line here
            }
        }
    }

}

Я нашел этот вопрос , но он не решил мою проблему:

Ответы [ 2 ]

0 голосов
/ 19 ноября 2018

Может быть, вы можете просто создать новый файл и поместить ваши данные в новый файл. Как это:

void Data::delete_line(const string& idNr) {
ifstream list;
ofstream outFile("newList.txt");
string readFile, id;

list.open("list.txt", ios::app);

if (list.is_open()) {
    while (getline(list, readFile)) {
        int pos = readFile.find(';');
        id = readFile.substr(0, pos);
        if (idNr != id) {
            outFile << readFile;
        }
    }
}
list.close();
outFile.close();

remove("list.txt");
rename("newList.txt", "list.txt");
}

В конце вы просто удаляете свой старый файл и переименовываете новый файл с именем старого файла. Я надеюсь, что это решит вашу проблему.

0 голосов
/ 19 ноября 2018

Без создания нового файла невозможно удалить строку в середине файла.Если вы не замените его на месте.

Так что в этом состоянии, вы просто должны использовать метод ниже:

std::ostream::seekp

Обратите внимание на этот пример:

// position in output stream
#include <fstream>      // std::ofstream

int main () {

  std::ofstream outfile;
  outfile.open ("test.txt");

  outfile.write ("This is an apple",16);
  long pos = outfile.tellp();
  outfile.seekp (pos-7);
  outfile.write (" sam",4);

  outfile.close();

  return 0;
}

В этом примере, Tellp используется для получения позиции в потоке после операции записи.Затем указатель перемещается назад на 7 символов, чтобы изменить файл в этой позиции, поэтому конечное содержимое файла:

Это пример

...