簡體   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