записать данные в нужную строку в уже существующий файл

0

У меня есть текстовый файл, который уже имеет 40 строк данных. Я хочу записать данные непосредственно перед двумя последними строками в файле. Я новичок в c++. Я искал в Интернете и нашел несколько функций, таких как fseek и seekp, но я не понимаю, как эти функции меняют линии. Не могли бы вы дать несколько указаний на это? Заранее спасибо.

Теги:
visual-c++

2 ответа

3
  1. Откройте файл, используя std::ifstream
  2. Прочитайте весь файл в std::vector<std::string> с записью для каждой строки в файле (вы можете использовать std::getline() и std::vector<std::string>::push_back() методы реализации этого).
  3. Закройте std::ifstream
  4. Измените векторную запись в индексе строки, который хотите изменить, или, альтернативно, вставьте дополнительные записи в вектор, используя std::vector<std::string>::insert()
  5. Откройте файл, используя std::ofstream
  6. Запишите содержимое векторов обратно в файл (просто перебирайте вектор и выводите каждую запись в файл).

В этом случае вы не должны возиться с функциями seek; в частности, нет, если размер замены изменяется динамически.

  • 0
    я могу использовать это для рутины tchar?
  • 0
    Что именно вы имеете в виду под «рутиной tchar» ? Какой именно? Обычно MSVC ++ должен правильно TCHAR глобальное определение TCHAR , если вы беспокоитесь об этом. Думаю, они автоматически переведут на std::wstring если это необходимо, или s.th. как это.
Показать ещё 2 комментария
2

Вы говорите C++, поэтому я предполагаю, что вы имеете в виду это, а не C. FIFO приходит на ум для этой цели.

$ cat last_two_lines.c | ./a.out

#include <iostream>
#include <string>
#include <deque>

main ()
{
  std::deque<std::string> fifo;
  while (!std::cin.eof()) {
    std::string buffer;
    std::getline(std::cin, buffer);
    fifo.push_back(buffer);
    if (fifo.size() > 2) {
      std::cout << fifo.front() << "\n";
      fifo.pop_front();
    }
  }
  std::cout << "    // LINE INSERTED" << "\n";
  while (fifo.size() > 0) {
    std::cout << fifo.front() << "\n";
    fifo.pop_front();
  }
  return 0;
    // LINE INSERTED
}
  • 0
    Это прекрасно работает: ideone.com/dOB2Rw

Ещё вопросы

Сообщество Overcoder
Наверх
Меню