Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在C中接受文件并生成归档文件?_C - Fatal编程技术网

如何在C中接受文件并生成归档文件?

如何在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

我试图编写一个程序,在命令行上接受两个文件(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 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嗨,我只保留了两个参数。。。现在它不生成归档文件