C语言 如何使用fwrite()将结构体写入文件?

ui7jx7zq  于 2022-12-03  发布在  其他
关注(0)|答案(2)|浏览(206)

我正在用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_namebuffer,它们确实是我想要进入结构体的字符串。没有编译器错误,但是在我的存档文件中没有显示标题沿着内容。

sr4lhrrt

sr4lhrrt1#

您的fwrite正在尝试写入in,而不是arch。因为您没有检查fwrite的返回值,所以这个错误(尝试写入一个已打开供读取的文件)不会被检测到。

m1m5dgzv

m1m5dgzv2#

似乎fwrite()调用切换了项目数和项目大小字段。我认为应该是fwrite(&header, sizeof(struct fileHeader), 1, arch);

相关问题