C语言 链接文件而不是链表



我有一个链表,其中包含时间开始和时间结束元组。在每个列表中,这些元组不重叠。现在,我希望将它们存储在文件中,而不是将这些元组放在列表中。所以每个列表现在都应该是一个文件。为了对这些文件进行排序并浏览每个文件,我必须知道文件旁边的哪个文件。换句话说,我怎样才能使指向下一个文件的指针,例如在链表中。

    typedef struct List
{
  struct List *next;

} List;

但我不想要这样的东西,我先创建链表,然后将每个列表放在一个文件中,因为我想逃避内存使用。

static void create_files(List* first){
List* tmp = first;
int partition_num = 1;
while(tmp != NULL){
    char filename[29];
    sprintf(filename, "Partitions%d/Partition%d.txt",partition_folder, partition_num);
    File* partition;
    partition= fopen(filename, "w");

    while(tmp->head != NIL){
        fprintf(partition,"[%d, %d) n",ts,te);
        tmp->head= tmp->head->next;
    }
    list_num++;
    tmp=tmp->next;
}

更多类似的东西

File* firstfile;
{ //adding data to this file}
File* second_file;
{ // adding data to this file}
firstfile ->next = second file;

所以我想要类似链接文件的东西。有什么建议吗?

这样定义

struct FileLinkedList
{
    FILE * f;
    FileNode * next;
}

但是您需要在文件中有一些元数据,例如文件中的第一行是下一个文件的文件名或 0 结束

答.txt

B.txt
This is the first Node in the FileLinkedList

B.txt

0
This is the last Node in the FileLinkedList

列表

{ [A.txt] }--> { [B.txt] }--> 0

然后定义函数以为您生成列表

FileLinkedList* createFileLinkedList (char* file_name)
{
    char next_file[255];
    FileLinkedList* n,head = (FileLinkedList*)malloc(sizeof(FileLinkedList));
    head->f = fopen(file_name);
    next_file = get_meta(head->f);
    init_reader(head->f);
    n = head;
    while (strcmp("0",next_file) != 0)
    {
        n->next = (FileLinkedList*)malloc(sizeof(FileLinkedList));
        n = n->next;
        n->f = fopen(next_file);
        next_file = get_meta(head->f);
        init_reader(head->f);
    }
    return head;
}

get_meta在哪里阅读我们需要的第一行

char* get_meta (FILE* f)
{
    char* m = (char*)malloc(sizeof(char)*255);
    rewind(f);
    fgets(m, sizeof(m), f);
    return m;
}

init_reader是将文件光标放在元数据部分之后

void init_reader (FILE* f)
{
    rewind(f);
    while(fgetc(f) != 'n');
}

相关内容

  • 没有找到相关文章

最新更新