如何在C中接受文件并生成归档文件?
我试图编写一个程序,在命令行上接受两个文件(File1和File2),并生成一个包含所有这些文件的归档文件 这是我的密码:如何在C中接受文件并生成归档文件?,c,C,我试图编写一个程序,在命令行上接受两个文件(File1和File2),并生成一个包含所有这些文件的归档文件 这是我的密码: #include <stdio.h> #include <stdlib.h> #include <string.h> #define NAME_SIZE 300 struct header { char name[NAME_SIZE]; char size[12]; }; typedef struct header
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAME_SIZE 300
struct header {
char name[NAME_SIZE];
char size[12];
};
typedef struct header HEADER;
typedef HEADER * HEADER_PTR;
int main(int argc, char ** argv) {
int headerSize = sizeof(HEADER);
FILE * archive;
archive = fopen("File1.txt", "File2.txt");
for (int i = 1; i < argc; i++) {
char * filename = argv[i];
FILE * fptr;
fptr = fopen(filename, "r");
if (fptr == NULL) {
printf("Error opening file\n");
}
HEADER_PTR FILE_HEAD = malloc(headerSize);
memset(FILE_HEAD->name, 0, NAME_SIZE * sizeof(char));
memset(FILE_HEAD->size, 0, 12 * sizeof(char));
snprintf(FILE_HEAD->name, NAME_SIZE, "%s", filename);
fseek(fptr, 0, SEEK_END);
sprintf(FILE_HEAD->size, "%ld", ftell(fptr));
fwrite(FILE_HEAD, headerSize, 1, archive);
fseek(fptr, 0, SEEK_SET);
while (!feof(fptr)) {
fputc(fgetc(fptr), archive);
}
fclose(fptr);
}
fclose(archive);
return 0;
}
#包括
#包括
#包括
#定义名称\u大小300
结构头{
字符名称[名称大小];
字符大小[12];
};
typedef结构头;
typedef收割台*收割台PTR;
int main(int argc,字符**argv){
int headerSize=sizeof(表头);
文件*档案;
archive=fopen(“File1.txt”、“File2.txt”);
对于(int i=1;i名称,0,名称大小*大小(字符));
memset(文件头->大小,0,12*sizeof(char));
snprintf(文件头->名称、名称和大小,“%s”,文件名);
fseek(fptr,0,SEEK_END);
sprintf(文件头->大小,“%ld”,ftell(fptr));
fwrite(文件头,标题化,1,存档);
fseek(fptr,0,SEEK_SET);
而(!feof(fptr)){
fputc(fgetc(fptr),存档);
}
fclose(fptr);
}
档案馆;
返回0;
}
问题:它没有生成存档文件…
fopen
接受单个文件名,因为它只打开一个文件。你想要的是你决定命名存档文件的文件名,而不是两个文件名;archive=fopen(“File1.txt”、“File2.txt”、“a+”)并使用/program File1.txt File2.txt调用您的程序查看手册页了解更多信息。它只接受2个参数,您给它3个参数,正如错误所示。@DavidRanieri我将得到'archive'错误undeclared@yano嗨,我只保留了两个参数。。。现在,它不会生成归档文件fopen
只接受一个文件名,因为它只打开一个文件。你想要的是你决定命名存档文件的文件名,而不是两个文件名;archive=fopen(“File1.txt”、“File2.txt”、“a+”)
并使用/program File1.txt File2.txt调用您的程序查看手册页了解更多信息。它只接受2个参数,您给它3个参数,正如错误所示。@DavidRanieri我将得到'archive'错误undeclared@yano嗨,我只保留了两个参数。。。现在它不生成归档文件