这里我有一个文件名,我想先创建这个文件。
我想在File中留下一些字节而不是我想写数据。
所以我在下面的代码中使用了fseek(pFile, 10, SEEK_SET)
。
我在这里写的"sam"
来自第11位。
然后关闭文件并再次以追加模式打开此文件4次,并在文件末尾写入“abc"
。
所以example.txt
中的总字节数为25
个字节。
所以文件数据就像这个..........samabcabcabcabc
。
但我不想在这个文件数据中使用“sam”。意味着我只想要22个字节。
如果我在这里,请使用fputs("sam", pFile);
而不是仅提供12个字节,文件数据看起来像abcabcabcabc
。
我希望输出文件如..........abcabcabcabc
。
在实际程序中,我有一个函数,它在10个字节后附加数据。并且这个函数多次调用,那么我该如何实现这个目标呢?
我的示例代码就在这里。
#include <stdio.h>
int main() {
FILE * pFile;
pFile = fopen("example.txt", "wb");
fseek(pFile, 10, SEEK_SET);
fputs("sam", pFile);
fclose(pFile);
append("example.txt");
append("example.txt");
append("example.txt");
append("example.txt");
return 0;
}
void append(char *file) {
FILE * pFile;
pFile = fopen("example.txt", "ab");
fputs("abc", pFile);
fclose(pFile);
}
答案 0 :(得分:2)
来自man fopen
打开要追加的文件时(即Type参数时) 设置为a),不可能覆盖已经存在的信息 文件。
因此,如果您希望以sam
append()
即使在a+
打开模式下,您也可以重新定位(使用fseek
,rewind
)内部指针到文件中的任何位置进行读取,但写入操作会将其移回文件的结尾。
解决方法是首次使用r+
开启模式,使用fseek
重新定位内部指针,然后编写abc
。之后,您可以照常拨打append