Я пытаюсь написать программу, которая открывает основной файл, печатает заголовок по умолчанию. Открывает файлы, передаваемые через аргументы, собирает статистику о них, создает уникальный для них заголовок, а затем печатает их заголовок и содержимое файла в основной файл. У меня проблемы с созданием заголовка и чтением содержимого в основной файл.
Проблема заключается в строках
int filesize =( FileStat.st_size);
const Header FileHeader(filesize,0,argv[i]);
Но я предоставил весь код для справки.
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>
typedef struct hdr
{
int file_size;
char deleted;
char file_name[256];
}Header;
const Header defaultHeader = {-10, 0, "CS3411 TAR"};
int main(int argc, char* argv[])
{
struct stat FileStat;
//Create the initial header, should test if exists
FILE *fp;
int exists = 0;
fp = fopen("CS3411TAR.txt","a+");
if(!fp)
{
perror("Couldn't open file");
return EXIT_FAILURE;
}
//Check if exists
Header header;
fseek(fp,0,SEEK_SET);
int bytesRead = fread(&header, sizeof(Header),1,fp);
if(bytesRead == 1)
{
printf("Header found!\n");
}
else
{
fseek(fp,0,SEEK_SET);
fwrite(&defaultHeader, sizeof(Header),1,fp);
printf("Header written.\n");
}
fclose(fp);
//continue
//loop argv files
for(int i=1;i<argc;(i = i +1)){
FILE *ft = fopen(argv[i],"r");
FILE *fp = fopen("CS3411TAR.txt","a+");
if(!ft){
perror("couldnt open a file");
return EXIT_FAILURE;
}
if(!fp){
perror("coulnt open tar file");
return EXIT_FAILURE;
}
//Generate file stats and construct header
stat(argv[i],&FileStat);
int filesize =( FileStat.st_size);
const Header FileHeader(filesize,0,argv[i]);
fwrite(&FileHeader, sizeof(Header),1,fp);
//loop file contents
char c;
while ((c = fgetc(ft))!= EOF){
fwrite(c, sizeof(c),1,fp);
}
fclose(ft);
fclose(fp);
}
return 0;
}
желаемый выход -
// default header
//file 1 header
//file 1 contents
//file 2 header
//file 2 contents
...
Я получаю ошибку
Unknown type name "hdr"
expect ')' before numeric constant
FileHeader undeclared
Если я удаляю несколько строк, чтобы просто проверить открытие файла, я получаю ошибку сегментации