首页 > 解决方案 > 我如何阅读带有 fread 的列表?

问题描述

这可能吗,这里有什么问题!?

我需要它来读取属于“Orcamento”一个节点内的“项目”列表,以及“决定”列表。

int lerDadosO(DLLIST3 *orcamentos) {
    int nOrcamentos = 0, i = 0;
    ORCAMENTO Orcamento;

    FILE *ficheiro = fopen("dadosO.bin", "rb");

    if(ficheiro != NULL) {
        fseek(ficheiro, 0L, SEEK_END);
        nOrcamentos = ftell(ficheiro) / sizeof(ORCAMENTO);
        rewind(ficheiro);
        while (i != nOrcamentos) {
            Orcamento.itens = createI();
            Orcamento.decisores = createU();
            fread(&Orcamento, sizeof(ORCAMENTO), 1, ficheiro);
//            viewI(Orcamento.itens, listarItem);
            if(insertendO(orcamentos, Orcamento) != 0) {
                printf("Ocorreu um Erro!");
                return 0;
            }
            i++;
        }
        fclose(ficheiro);
    }
    else {
        printf("Não existe nenhum ficheiro binário!");
    }
    return nOrcamentos;
}

标签: clinked-listnested-listsfread

解决方案


我不确定您是如何实现列表系统的,这可以通过首先将数据读取到缓冲区来完成,而不是将其转换为“列表”

struct record {
  int field0
  int field1;
};

int main(void) {
  // variables
  FILE *stream;               // reading data
  struct record data[length]; // writing data
  struct mylisttype *list;    // result
  ...
  // read `length` `struct record`s from `stream`
  fread(data, sizeof(struct record), length, stream);
  listfrombuffer(buffer, list);
  ...
}

推荐阅读