使用偏移写入文件

时间:2014-11-19 08:01:11

标签: c file-io

我正在尝试编写一个简单的代码块,将数组的内容写入文件中的某个位置。该文件是一个简单的纯文本文件。它似乎做了所有写入,但文件内容最终以十六进制结束(开头有一堆零)。我正在使用以下内容:

FILE * fp; // file to write to
void fwritel(long offset, char * data) {
    fp = fopen(filename, "w");  
    fseek(fp, offset, SEEK_SET);
    fwrite(data, 1, strlen(data) - 1, fp);
    fclose(fp);
}

我还使用了pwrite的变体,它不起作用:pwrite(fp, data, strlen(data) - 1, offset);我正在寻找的代码只会在位置data上写offset文件从offsetoffset + strlen(data)

1 个答案:

答案 0 :(得分:0)

这是一个多部分修复:

  1. Joachim Pilebord是对的。使用fopen(file, "w")打开文件将破坏文件的内容。因此,每次打开文件时,将文件归零,然后写入新内容。

  2. M Oehm也是正确的,新内容将用零填充 - 因此Sublime将其视为十六进制。

  3. 所以,只打开文件一次,在程序开头的某处,只使用

    fseek(fp, offset, SEEK_SET);
    fwrite(data, 1, strlen(data), fp);
    

    并关闭程序末尾附近的文件会产生正确的输出。使用fputc(' ')会有效,但您需要确保我不会替换您需要的字符(即先前在文件的那些部分放置数据)。