Запись и чтение бинарных файлов на C - PullRequest
0 голосов
/ 23 октября 2018

Я пишу код C, который записывает некоторую информацию о выборке сигнала, затем читает их и сохраняет их в двоичном файле.Я получил правильный вывод при написании информации, но получил ошибки при попытке прочитать их.Вот мой код:

#include <stdio.h>
#include <stdlib.h>

typedef struct {
    unsigned int sample_offset;
    double time;
    unsigned int date;
    unsigned char receiver_name[20];
    double sample_rate;
    unsigned int channel;
    unsigned int bits;
    unsigned char file_type[11];
    unsigned int freq_band;
    double channlel_bandwidth;
    double firmwire_version;
    double header_version;
} sampleInfo;

int main() {
    // Writing file
    FILE *fw;
    sampleInfo data = { 64, 0.55, 19, "Gadfly", 51.2, 2, 4, "Spreadsheet", 1,24, 1.0, 1.0 }, read_data;

    fw = fopen("sample.bin", "wb");
    if (!fw) {
        printf("Unable to open the file\n");
        return 1;
    } else {
        printf("Sample offset: %d bytes\n", data.sample_offset);
        printf("Capture time: %.2f seconds\n", data.time);
        printf("Date: %d October,2018\n", data.date);
        printf("Receiver name: %s\n", data.receiver_name);
        printf("Sample rate: %.2f Mega-samples per second\n", data.sample_rate);
        printf("Number of channels used: %d\n", data.channel);
        printf("Number of bits per I and Q sample: %d\n", data.bits);
        printf("File type: %s\n", data.file_type);
        printf("Frequency band per channel: L%d\n", data.freq_band);
        printf("Channel Bandwidth: %.fMHz\n", data.channlel_bandwidth);
        printf("Firm-wire version: %.1f\n", data.firmwire_version);
        printf("Header version: %.1f\n\n\n\n", data.header_version);
    }

    fwrite(&data, sizeof(sampleInfo), 1, fw);
    fclose(fw);

    // Reading file
    FILE *fr;
    fr = fopen("Sample.bin", "rb");
    if (!fr) {
        printf("Unable to open the file\n");
        return 1;
    } else {
        printf("Sample offset: %d bytes\n", read_data.sample_offset);
        printf("Capture time: %.2f seconds\n", read_data.time);
        printf("Date: %d October,2018\n", read_data.date);
        printf("Receiver name: %s\n", read_data.receiver_name);
        printf("Sample rate: %.2f Mega-samples per second\n", read_data.sample_rate);
        printf("Number of channels used: %d\n", read_data.channel);
        printf("Number of bits per I and Q sample: %d\n", read_data.bits);
        printf("File type: %s\n", read_data.file_type);
        printf("Frequency band per channel: L%d\n", read_data.freq_band);
        printf("Channel Bandwidth: %.fMHz\n", read_data.channlel_bandwidth);
        printf("Firm-wire version: %.1f\n", read_data.firmwire_version);
        printf("Header version: %.1f\n\n\n\n", read_data.header_version);
    }

    fread(&read_data, sizeof(sampleInfo), 1, fw);
    fclose(fr);

    return 0;
}

Я относительно новичок в C, поэтому немного борюсь с этим.Любая помощь будет высоко оценена.Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

В операторе чтения есть опечатка: fread(&read_data, sizeof(sampleInfo), 1, fw); следует читать из fr, а не fw:

fread(&read_data, sizeof(sampleInfo), 1, fr);

Более того, вы должны прочитать данные до печать содержимого read_data.

Необходимо также проверить возвращаемое значение fwrite и fread, чтобы убедиться, что операция ввода / вывода прошла успешно.

0 голосов
/ 23 октября 2018

Прочитайте перед печатью!

fread(&read_data,sizeof(sampleInfo),1, fr); должен находиться в ветви else, прежде чем печатать текст.

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