2011年11月27日日曜日

[C 语言] 文件复制

1. 二进制文件复制
1-1. 处理超大文件用 fopen64()
1-2. fread, fwrite 可以处理任何类型数据 (struct 等), 而不会分裂数据

int binaryFileCopy()
{
    const int BUFFE_RSIZE = 256 * 1024;
    char buffer[BUFFE_RSIZE];
    FILE *in, *out;
    int len;

    if((in = fopen("in", "rb")) == NULL)
    {
        printf("the file1 can not open\n");
        return EXIT_FAILURE;
    }

    if((out = fopen("out", "wb")) == NULL)
    {
        printf("the new file can not open\n");
        return EXIT_FAILURE;
    }

    while((len = fread(buffer, sizeof(char), BUFFE_RSIZE, in)) > 0)
    {
        fwrite(buffer, sizeof(char), len, out);
        memset(buffer, 0, BUFFE_RSIZE);
    }

    fclose(out);
    fclose(in);

    return EXIT_SUCCESS;
}

2. 文本文件复制
int textFileCopy()
{
    char ch;
    FILE *in;
    FILE *out;

    if((in = fopen("in", "r")) == NULL)
    {
        printf("can't open the file\n");
        return (EXIT_FAILURE);
    }

    if((out = fopen("out", "w")) == NULL)
    {
        printf("can't open the file\n");
        return (EXIT_FAILURE);
    }

    while(!feof(in))
    {
        if ((ch = fgetc(in)) != EOF)
            fputc(ch, out);
    }

    /*
        while((ch = fgetc(in)) != EOF)
        {
            fputc(ch, out);
        }
    */

    fclose(in);
    fclose(out);

    return EXIT_SUCCESS;
}

0 件のコメント:

コメントを投稿