gpt4 book ai didi

c++ - 文件处理 C++ :Which is the ideal stream to be used while working with database files?

转载 作者:搜寻专家 更新时间:2023-10-31 02:19:13 24 4
gpt4 key购买 nike

我想知道在处理数据库文件时应该应用的文件处理流。我想创建一个数据库文件,即一个包含内容并且可以编辑这些内容的文件

例如-假设文件包含如下数据

Harshul 97  Jack 42  Sergey 69  Bill 96  Mark 92  Will 49

这是一个数据库文件,其中包含用户名及其账户中的资金(存储在账户名之后)。

现在假设我想在我的数据库中添加一个新帐户,因为我必须首先检查一个帐户是否已经存在,因为如果它存在,那么我将显示错误消息,否则我将简单地通过附加创建一个新帐户数据写入文件。

现在我认为我需要编辑数据,所以我应该使用 fstream 但是在使用 fstream 时我遇到了文件结尾标记的问题,它将好的位设置为失败位并停止文件 i-o 操作我得到了一个解决方案为此,即在必要时清除流(每当文件指针到达 eof 时)

例如-

fstream file("Filename.txt",ios::in|ios::ate|ios::out);
char str[80];
while(file>>str)
{
//do the required stuff
}
//clear the stream and reuse it
file.clear();
file.seekp(0);

但这有点愚蠢,所以我认为我应该使用 peek() 函数来告诉我们下一位是否在它之前是 eof 但得到的结果是这不是正确的做法,我应该打开一次又一次的文件File Handling:What is the use of peek() function in c++?

虽然我也得到了同时使用 ifstream 和 ofstream(没有 trunc 和 ate 模式)的建议,但我想知道我是否能够用它来编辑数据。假设我输入了一个新的 indivisual 的详细信息说“Finch 96"现在,ofsteam 变量将说明新条目,但对于 ifstream 对象,它之前已将文件数据读入其缓冲区,并且在我们不重新打开 ifstream 中的文件之前,没有说明我们的新条目“Finch 96”对象

关于这件事我已经搜索了很多但没有得到结果可能是我没有能够恰本地表达我的问题,现在我认为我的目标已经很明确了

最佳答案

如果您希望能够手动编辑文本文件,那么它是个不错的选择。如果你称它为数据库,并且只想以编程方式处理它,你应该考虑一个二进制文件。在最简单的层面上,您可以拥有一个包含固定大小记录的直接文件,这样您就可以进行就地记录编辑。或者,如果您不想在周围存在圆形轮子时重新发明椭圆轮子,则可以使用 sqlite 数据库来为您处理实现细节。

但如果你真的需要一个文本文件,你应该在记录容器中读取一次,并一次保存所有记录。一个好的做法是保存到同一文件夹中的临时文件,并仅在所有内容都成功写入后才重命名。

关于c++ - 文件处理 C++ :Which is the ideal stream to be used while working with database files?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33762643/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com