C语言操作中的困惑

时间:2012-03-14 10:03:17

标签: c file append fopen

这里我有一个文件名,我想先创建这个文件。 我想在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);
}

1 个答案:

答案 0 :(得分:2)

来自man fopen

  

打开要追加的文件时(即Type参数时)   设置为a),不可能覆盖已经存在的信息   文件。

因此,如果您希望以sam

中的方式在附加模式下打开文件,则无法覆盖append()

即使在a+打开模式下,您也可以重新定位(使用fseekrewind)内部指针到文件中的任何位置进行读取,但写入操作会将其移回文件的结尾。

解决方法是首次使用r+开启模式,使用fseek重新定位内部指针,然后编写abc。之后,您可以照常拨打append