我正在用C语言编写一个归档程序-我已经让它遍历并将文件内容写入一个文件,但我似乎无法将我创建的fileHeader
结构(使用fwrite()
)写入文件(目前只使用两个属性进行测试,我知道还需要更多)。
struct fileHeader {
char name[50];
char path[50];
};
void addToArch(char *inPath, char *archPath, struct fileHeader header) {
FILE *in, *arch;
int ch;
arch = fopen(archPath, "ab");
struct stat sb;
stat(inPath, &sb);
if(S_ISREG(sb.st_mode) == 0) {
fprintf(arch, "\n%s\n", inPath);
printf("Directory detected - skipped");
}
else {
in = fopen(inPath, "rb");
ch = fgetc(in);
fwrite(&header, 1, sizeof(struct fileHeader), in);
while (ch != EOF) {
fputc(ch, arch);
ch = fgetc(in);
}
fclose(in);
fclose(arch);
printf("File copied successfully!\n");
}
}
我的呼叫代码在这里:
//Create new file header
struct fileHeader header;
//Populate struct fields
snprintf(header.name, 50, "%s", entry->d_name);
snprintf(header.path, 50, "%s", buffer);
addToArch(buffer, "out.txt", header);
我已经打印了entry->d_name
和buffer
,它们确实是我想要进入结构体的字符串。没有编译器错误,但是在我的存档文件中没有显示标题沿着内容。
2条答案
按热度按时间sr4lhrrt1#
您的
fwrite
正在尝试写入in
,而不是arch
。因为您没有检查fwrite
的返回值,所以这个错误(尝试写入一个已打开供读取的文件)不会被检测到。m1m5dgzv2#
似乎fwrite()调用切换了项目数和项目大小字段。我认为应该是
fwrite(&header, sizeof(struct fileHeader), 1, arch);