我正在尝试打开tar.gz文件并将该文件的内容读入缓冲区。我想创建另一个tar.gz文件并将缓冲区写入新创建的tar.gz文件。新文件是否与前一个文件相同?代码如下:
int main()
{
FILE *fp,*fp1;
int len,len1;
int length=0;
char *buf=malloc(1024);
char *buf1=malloc(1024);
fp=fopen("/home/sharwari/Downloads/criu-1.4/3049.tar.gz","rb");
while((len=fread(buf,1024,1,fp))>0)
{
printf("%s",buf);
}
fclose(fp);
fp1=fopen("/home/sharwari/imp5.tgz","wb");
if(fp1==NULL)
printf("\n\terror in creating file...");
len1=fwrite(buf,1,strlen(buf),fp1);
printf("\n\t No. of bytes written: %d",len1);
fclose(fp1);
}
答案 0 :(得分:0)
您有正确的想法,但您的代码存在许多问题。至少包括:
答案 1 :(得分:0)
fwrite(buf,1,strlen(buf),fp1);
。
应该是 fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
1024
个字节的块,如果文件大小小于1024
个字节,则会失败使用以下代码,您尝试从源文件逐字节复制到 目标文件。 您可以参考以下代码。
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp,*fp1;
int len,len1 = 0;
char buf[1];
fp = fopen("/home/sharwari/Downloads/criu-1.4/3049.tar.gz","rb");
fp1 = fopen("/home/sharwari/imp5.tgz","wb");
if (fp == NULL || fp1 == NULL) {
printf("\n\terror in creating file...");
return -1;
}
while ((len = fread(&buf, 1, 1, fp)) > 0) {
len1 += fwrite(&buf, 1, 1, fp1);
}
printf("\n\t No. of bytes written: %d",len1);
fclose(fp1);
fclose(fp);
return 0;
}
答案 2 :(得分:0)
是不是有点过度杀戮到缓冲区。根据定义,fopen,fread等已经被缓冲并以最佳方式处理实际的io。代码应该更像
while(1){
if(i = fgetc(in)== EOF)break;
其他fputc(i,out);
}