我对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将缓冲区的内容写入一个新文件,但我似乎无法获取将在其中写入的参数。或者有更好的解决方案吗?
答案 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)