写一个链表二进制文件(C)(Writing a linked list to binary file

2019-10-18 19:11发布

所以,我已经建立了一个链表,从文件中读取数据,做了一些计算和处理,现在我想将新列表存储到一个二进制文件。

这里是我的结构设置:

typedef struct Comp{
    char name[5];
    char node1[5], node2[5];
    float value;    //value
}ComponentType;

typedef struct ListNodeT{

    ComponentType Component;
    float voltage, power, current;
    struct ListNodeT *nextPtr;
}ListNodeType;

在一个单独的函数,我试图写AA文件:

FILE *filePtr;

char fileName[13] = "SaveData.bin";
filePtr = fopen(fileName, "wb");
int index = 0;

while (CircuitData != NULL)
{
    fwrite(CircuitData, sizeof(ListNodeType), 1, filePtr);
    CircuitData = CircuitData->nextPtr;
    index++;
}

上面的代码不是那么现在的工作我的问题是,使用单一的fwrite(CircuitData,的sizeof(ListNodeType),1,filePtr)我可以写入文件或我应分别写各组分如下:

fwrite(CircuitData->Component.name, sizeof(CircuitData->Component.name), 1, filePtr);

我应该怎么做呢? 我的第二个问题是,我将如何读这个二进制文件再次回结构?

Answer 1:

那么,你将不能够在一个新的程序调用使用指针值从一个文件,所以你需要做一些事。 你可以打印和零出指针之前创建一个副本; 然后阅读时,你需要分配正确的指针值,新分配的结构。

我大概用递归函数读取它们。 事情是这样的:

ListNodeType *read_list_from_file (FILE *fileptr) {
    ListNodeType node;
    ListNodeType *nodeptr;
    if (fread(&node, sizeof(node), 1, fileptr) == sizeof(node)) {
        nodeptr = malloc(sizeof(node));
        //TODO: handle malloc failure
        memcpy(nodeptr, &node, sizeof(node);
        nodeptr->nextPtr = read_list_from_file(fileptr);
        return nodeptr;
    } else {
        return NULL;
    }
}


Answer 2:

如果打算发送该文件,并允许它被另一计算机读取在,可能必须用字节表示的问题(FE浮点值)。 一种方法是,以彩车转换为字符串表示的write()方法,并将其转换回读()。

更好是使用良好定义的格式(例如CSV或XML)



文章来源: Writing a linked list to binary file(C)