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;
}
直截了当我的问题是:如何让文件指针指向下一行?下面给出的是我整个程序的一部分:
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;
}