以排序格式在二进制文件中插入数据

时间:2012-08-05 07:49:17

标签: c++ file-io binary

我正在尝试使用文件处理通过二进制文件中的类输入数据。但我无法做的是以排序的方式写入数据。就像我无法弄清楚如何唯一地识别我在该特定文件中过去插入的记录之一。我为什么要这样做?因为我希望能够执行删除,修改特定记录等操作。我尝试使用静态变量,但我希望保持该值,直到我下次运行该程序,这是静态无法实现的。顺便说一句,这是班级。

class question
{
    private:
    char question[500];
    char option1[25],option2[25],option3[25],option4[25];
    int answernumber;
    public:
    int qno;
    void createquestion(); // Just to to accept data into
                           // question,options,answernumebr.
}

现在唯一的问题是分配问号是qno。我打算用它作为我的主键(使用这个词不对)。但我无法弄明白如何在没有用户干预的情况下自动为其分配相应的值?有什么建议? 编辑: - 我也尝试这样做--->我想到读取输入的最后一条记录,然后提取相应的问题编号。然后分配该数字,并为其添加1 ...所以old_qno + 1 = new_qno .....但不幸的是没有做得太好。因为我的所有问题都被指定为问题1

1 个答案:

答案 0 :(得分:0)

您可以使用您编写的文件大小来计算到目前为止您所拥有的数字问题。

ifstream file("filename");
file.seekg(0, ios_base::end);
streampos file_size = file.tellg();
file.close();
int next_question = file_size/sizeof(question) + 1;

但你必须小心删除,假设你的文件中有问题1,2,3,4,然后你删除问题3.现在你的文件有1,2,4,所以上面的方法会说下一个问题是4,但你已经有了问题4.解决这个问题的一种方法是执行逻辑删除。不是实际从文件中删除问题而是将其保留在那里,而是以某种方式标记它,以便您知道它已被删除。例如,您可以将问题编号设置为零。因此,在删除问题3之后回到上面的示例,您将拥有1,2,0,4。现在文件大小方法将正确地说下一个问题是5。