Как мне использовать fwrite () для записи структуры в файл? - PullRequest
0 голосов
/ 19 декабря 2018

Я делаю архивную программу на 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, и они определенно являются строками, которые я хочу ввести вструктура.Нет ошибок компилятора, но в моем архивном файле не отображается заголовок вместе с содержимым.

1 Ответ

0 голосов
/ 19 декабря 2018

Ваш fwrite пытается записать в in, а не arch.Поскольку вы не проверяете возвращаемое значение fwrite, эта ошибка (попытка записи в файл, открытый для чтения) не обнаружена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...