C++文件结构

file structure in c++

直截了当我的问题是:如何让文件指针指向下一行?下面给出的是我整个程序的一部分:

         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,customername 和 product 是字符串 0,24和56是这些字符串从头开始的各自位置

我面临的问题是,每次我尝试写一条新记录时,它都会覆盖前一条记录,而不会转到下一行。

我希望每个新记录都与第 0、24 和 56 位置对齐。 我该怎么做? 提前致谢。

我不知道,如果我回答你的问题是对的,但如果你想确保在当前行内搜索,你可以这样做:

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 时文件流位于下一行的开头。

否则我要在流中找到光标的正确位置会有点复杂。

如果您使用该方法,您将面临一个具有挑战性的问题。你想使用 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;
}