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