我创建了这个编程问题,我将二进制文件中的书籍列表读取到结构数组中。如果该文件不存在,那么我希望程序创建该文件。
在这种情况下,我要求用户输入书籍及其作者。然后我将其作为一系列结构写入文件。
如果文件已经存在,上面有一些书(有作者),我想给用户一个选择,可以保留、删除或更新文件的书条目。
如果用户删除了一些书籍,那么只要未达到某些限制(MAX BOOKS),就应该为用户提供输入书籍数量的选项。
我很困惑我应该使用哪种模式打开文件
fopen
.
如果使用
r+b
模式,那么文件不存在会报错
如果使用
a+b
模式则只能追加写入。因此,如果用户决定删除一些书籍,并输入其他书籍,则此信息将依次附加到文件中。
如何解决这个问题?
我在不同模式下使用嵌套
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
,现有文件不会被截断,因此我们可以访问之前输入的数据。我测试了这个,这是有效的。如果在实践中推荐这种方法,请发表评论。