复制文件并附加到另一个文件

时间:2012-02-07 19:25:47

标签: c file-io

如何获取文件,复制文件并将其附加到另一个文件的末尾?

我想复制的文件是否需要在EOF之前打开读取,还是可以复制和追加?

6 个答案:

答案 0 :(得分:6)

我的问题并非100%明确,但这是您将文件附加到另一个文件的方式。 我使用了一个1字节的缓冲区,例如。您也可以将文件复制到块中。

FILE *source = fopen("to_copy", "rb");
/* I'm assuming it opened OK */
FILE *dest = fopen("dest", "ab");
/* I'm assuming it opened OK, again */

char byte;

while (!feof(source)) 
{
    fread(&byte, sizeof(char), 1, source);
    fwrite(&byte, sizeof(char), 1, dest);
}

fclose(source);
fclose(dest);

答案 1 :(得分:5)

要将文件tail的内容复制到文件head的末尾,请打开tail进行(文本或二进制)阅读,并head进行追加;这样的事情(以Plan 9的cat.c为模型。):

#include <stdio.h>
#include <stdlib.h>

void
append(FILE *head, FILE *tail)
{
    char buf[BUFSIZ];
    size_t n;
    while ((n = fread(buf, 1, sizeof buf, tail)) > 0)
        if (fwrite(buf, 1, n, head) != n)
            abort();
    if (ferror(tail))
        abort();
}

int main(void)
{
    FILE *head = fopen("head", "ab");
    FILE *tail = fopen("tail", "rb");
    if (!head || !tail)
        abort();
    append(head, tail);

    fclose(head);
    fclose(tail);

    exit(EXIT_SUCCESS);
}

正确的错误报告已留给读者。

答案 2 :(得分:0)

除了cnicutar的回答,我会说:

  • 在'append'模式下打开要附加到的文件(fopen()的'a'参数)。

  • 打开需要以“读取”模式追加的文件(fopen()的'r'参数)。

答案 3 :(得分:0)

要附加到文件,您无需读取每个字节以查找EOF,可以在附加模式fopen("/path/to/yourFileName", "ab")中打开它,或使用fseek(yourFilePointer, 0,SEEK_END);

答案 4 :(得分:0)

以附加模式打开文件时,默认情况下文件指针位于现有文本的末尾。因此,当您写入该文件时,新内容将“附加”到文本中。

答案 5 :(得分:0)