filestructure — структура файла в переполнении стека

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

         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, имя клиента и продукт являются строками
0,24 и 56 — соответствующие позиции для этих строк с самого начала

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

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

0

Решение

Вы ставите перед собой сложную задачу, если используете этот метод. Вы хотите использовать 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

Другие решения

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

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.

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

0

По вопросам рекламы [email protected]