我有一个关于文件打开模式的问题fopen()
。
就我而言,我想自由地寻找光标,EOF
有时甚至可能超出。更重要的是,我还想附加到它而不是截断现有文件。我试图以a+
模式打开文件;但是,我不能自由地寻找文件光标。每次我在 之外寻找光标时EOF
,新到达的数据都会附加到文件的末尾,而不是我指定的位置。同时,如果以w+
模式打开,现有文件将被截断。这个问题有完美的解决方案吗?
更新:
没有明确说明的一点是该文件可能并不总是存在;在这种情况下,我必须创建一个新文件。
其实我想处理一个配置文件。我不知道这样实施是否是一种好习惯。或者我应该先放置一个空的配置文件。这样有没有必要关心case文件不存在?
下面是代码片段:
FILE *f = fopen(FILE_PATH, "wb+");
struct record r;
if (f) {
if (fread((void *)&r, 1, sizeof(struct record), f) {
/* File exists, do the normal flow */
} else {
if (feof(f)) {
/* File is newly created, do some initialization */
}
}
} else {
/* issue a warning */
}