структура файла в с ++ - PullRequest
0 голосов
/ 11 мая 2018

прямо мой вопрос: как получить указатель файла на следующую строку?Ниже приведена часть всей моей программы:

         void filewrite(fstream &f2)
         {
            f2.seekp(0,ios::beg);
            f2.write(customerno,strlen(customerno));
            f2.seekp(24,ios::beg);
            f2.write(customername,strlen(customername));
            f2.seekp(56,ios::beg);
            f2.write(product,strlen(product));
            f2<<endl;
         }

здесь f2 - указатель файла customerno, customer и product - строки 0,24 и 56 - соответствующие позиции для этих строк с начала

проблема, с которой я сталкиваюсь, заключается в том, что каждый раз, когда я пытаюсь написать новую запись, она перезаписывает предыдущую и не переходит на следующую строку.

я хочу, чтобы каждая новая запись была выровнена с 0-м, 24-м и56 место.как мне это сделать?Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Вы ставите перед собой сложную проблему, если используете этот метод.Вы хотите использовать std::setw(), чтобы сделать это для вас.

Вот гораздо более простой способ сделать это:

#include <fstream>
#include <iomanip>
using namespace std; 
void filewrite(ofstream &f, string customerno, string customername, string product)
{
   f << left << setw(24) << customerno << setw(32) << customername << product << endl;
}
0 голосов
/ 11 мая 2018

Не знаю, правильно ли я понимаю ваш вопрос, но если вы хотите убедиться, что ищите внутри текущей строки, вы можете сделать это так:

void filewrite(fstream &f2)
{
  long pos = f2.tellp();

  f2.seekp(pos + 0);
  f2.write(customerno,strlen(customerno));
  f2.seekp(pos + 24);
  f2.write(customername,strlen(customername));
  f2.seekp(pos + 56);
  f2.write(product,strlen(product));
  f2<<endl;
}

Это работает только какхотя, если вы можете быть уверены, что файловый поток находится в начале следующей строки, когда вызывается функция filewrite.

В противном случае мне будет довольно сложно найти правильное расположение курсора впоток.

...