为我的问题寻找正确的打开模式

问题描述 投票:0回答:1

我创建了这个编程问题,我将二进制文件中的书籍列表读取到结构数组中。如果该文件不存在,那么我希望程序创建该文件。

在这种情况下,我要求用户输入书籍及其作者。然后我将其作为一系列结构写入文件。

如果文件已经存在,上面有一些书(有作者),我想给用户一个选择,可以保留、删除或更新文件的书条目。

如果用户删除了一些书籍,那么只要未达到某些限制(MAX BOOKS),就应该为用户提供输入书籍数量的选项。

我很困惑我应该使用哪种模式打开文件

fopen
.

  • 如果使用

    r+b
    模式,那么文件不存在会报错

  • 如果使用

    a+b
    模式则只能追加写入。因此,如果用户决定删除一些书籍,并输入其他书籍,则此信息将依次附加到文件中。

如何解决这个问题?

c fopen
1个回答
1
投票

我在不同模式下使用嵌套

fopen
调用找到了解决此问题的方法。 如果
pbooks
是指向名为
book.dat
的二进制文件的 FILE 指针。然后我做了以下

FILE * pbooks;

if ((pbooks = fopen("book.dat", "r+b")) == NULL)
    {
        if ((pbooks = fopen("book.dat", "w+b")) == NULL)
        {
            exit(EXIT_FAILURE);
        }
        
    }

因此,最初,如果文件不存在,则初始 fopen 函数返回

NULL
,因此执行内部 fopen 语句并创建文件。当文件已经创建并再次执行程序时,初始 fopen 函数成功执行,并且由于模式为
r+b
,现有文件不会被截断,因此我们可以访问之前输入的数据。我测试了这个,这是有效的。如果在实践中推荐这种方法,请发表评论。

© www.soinside.com 2019 - 2024. All rights reserved.