读取缓冲区中的文件,然后在新文件中写入缓冲区

时间:2016-10-24 09:40:20

标签: c

我对C中使用的归档操作有点新意。我想读取文件,将其内容复制到缓冲区,然后将该缓冲区中的内容复制到新文件中。 (目的是在另一个任务中使用此缓冲区) 我正在使用下面的代码在缓冲区中读取我的文件

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

int main () 
{
    FILE * fileP;
    long size;
    char * buffer;
    size_t final;

    fileP= fopen ( "C:\\Users\\test.pdf" , "rb" );
    if (fileP==NULL) {fputs ("File error",stderr); 
    exit (1);
    }

    // calculating file size
    fseek (fileP, 0 , SEEK_END);
    size = ftell (fileP);
    rewind (fileP);

    // allocating mem for file
    buffer = (char*) malloc (sizeof(char)*size);
    if (buffer == NULL) {fputs ("Memory error",stderr); exit (2);}

    // copying file into buffer
    final = fread (buffer,1,size,fileP);
    if (final != size) 
    {
        fputs ("Reading error",stderr); 
        exit (3);
    }
    // the whole file is now loaded in the memory buffer. 

    fclose (fileP);
    free (buffer);
    return 0;
}

我知道我需要使用fwrite将缓冲区的内容写入一个新文件,但我似乎无法获取将在其中写入的参数。或者有更好的解决方案吗?

1 个答案:

答案 0 :(得分:2)

fwrite之前,您首先需要fopen目标文件。

[源文件] ---&gt; [Memory Buffer] ---&gt; [目标文件]

将内存缓冲区写入文件的经典序列如下所示:

// Open File for writing
FILE *f_dst = fopen("C:\\foo.txt", "wb");
if(f_dst == NULL)
{
    printf("ERROR - Failed to open file for writing\n");
    exit(1);
}

// Write Buffer
if(fwrite(buffer, 1, size, f_dst) != size)
{
    printf("ERROR - Failed to write %i bytes to file\n", size);
    exit(1);
}

// Close File
fclose(f_dst);
f_dst = NULL;

另外,我在您的fread代码中注意到,您的“结果”和“最终”变量令人困惑(“结果”不存在):

// copying file into buffer
final = fread (buffer,1,size,fileP);
if (result != size)