繁体   English   中英

读取txt文件到链表C

[英]Read txt file to linked list C

我试图将我的链表保存到 txt 文件并稍后加载。 它用于电影编辑器项目。 节点:

// Frame struct
typedef struct Frame
{
    char* name;
    unsigned int    duration;
    char* path;
} Frame;


// Link (node) struct
typedef struct FrameNode
{
    Frame* frame;
    struct FrameNode* next;
} FrameNode;

我以这种方式保存了它:

小路

期间

名称

小路

期间

名称

小路

期间

名称

小路

期间

名称

...

\\n 之间的数据。

这是我的功能:

FrameNode* loadVideo()
{
    FrameNode* head = NULL;
    FrameNode* newNodeFrame = NULL;
    FrameNode* newFrame = NULL;
    FILE* f = NULL;
    char pathP[STR_LEN] = "";
    
    char file[1024] = { 0 };
    char c;

    char path[1000] = "";
    char name[1000] = "";
    char duration[STR_LEN] = "";

    int i = 0;
    int j = 0;

    printf("Enter the path of file to load: ( .txt)\n");
    myFgets(pathP);

    f = fopen(pathP, "r");

    if (f == NULL)
    {
        printf("Error opening file\n");
        return;
    }

    while ((c = (char)fgetc(f)) != EOF)
    {
        file[i] = c;
        i++;
    }

    fclose(f);

    for (i = 0; i < strlen(file); i++)
    {
        while (file[i] != '\n')
        {
            path[j] = file[i];
            i++;
            j++;
        }
        j = 0;
        i++;
        while (file[i] != '\n')
        {
            duration[j] = file[i];
            i++;
            j++;
        }
        j = 0;
        i++;
        while (file[i] != '\n')
        {
            name[j] = file[i];
            i++;
            j++;
        }
        j = 0;

        newFrame = craeteFrame(name, atoi(duration), path);
        FrameNode* newFrameNode = (FrameNode*)malloc(sizeof(FrameNode));

        newFrameNode->frame = newFrame;
        newFrameNode->next = NULL;

        insertAtEnd(&head, newFrameNode);
    }

    return head;
}

它并不完美,而且非常丑陋……有人有更好的选择吗? 谢谢。 ..如果您对文件中的保存有一些更改要提供给我,那将很好

使用fgets()读取整行。 您仍然需要处理内存分配以保存这些行的内容。 但是,大多数符合 POSIX 的操作系统还提供函数getline() ,该函数将一行读入缓冲区,它将自动为您分配。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM