if(record!=-1) { row=(pos+1)/20; column=(pos+1)%20-1; printf("文件内容:"); for(int j=0;j<F[record].size;j++) //清空磁盘 { printf("%c",Disk.filedata[row][column]); Disk.filedata[row][column++] = NULL; if(column==20) { column=0; row++; } } Node* current = freeList; Node* recordNode = current; int count = 0; while (current != NULL) { if(current->next!=NULL) { if(recordNode->next->data > pos) { recordNode = recordNode->next; while(count < filesize){ Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = pos++; newNode->next = NULL; count++; current->next = newNode; current = current->next; } current->next = recordNode; break; } current = current->next; recordNode = current; } }
时间: 2024-01-10 07:02:38 浏览: 62
这段代码实现了将更新后的文件内容写入到磁盘上。首先检查是否找到了要更新的文件,如果找到了,则计算文件的位置,即行数和列数,并输出提示信息要求用户输入新的文件内容。
接着,使用一个循环遍历该文件占用的磁盘空间,并将磁盘上的字符输出到控制台上。同时,将磁盘上的字符清空,将其设置为 `NULL`。
然后,定义了两个指针变量 `current` 和 `recordNode`,分别指向空闲链表的头节点和记录位置的节点。同时,定义了一个计数器变量 `count`,用于记录当前连续空闲块的大小。
接下来,使用一个循环遍历空闲链表,并记录当前可用的连续空间的大小到变量 `count` 中。如果 `count` 等于文件大小,说明找到了足够的连续空间,记录下位置并退出循环。
如果当前空闲块和下一个空闲块是连续的,则将 `count` 加 1。如果不连续,则将 `count` 重置为 1,并记录当前位置到 `recordNode` 中。
最后,将指向空闲链表的节点 `recordNode` 的 `next` 成员指向当前节点的 `next` 成员,从而删除已经被占用的空闲块。同时,将文件的大小记录到 `count` 变量中,表示释放了多少个连续空闲块。如果释放的空闲块大小不为 0,则将其添加到空闲链表中。最后,使用 `printf()` 函数输出提示信息,表示文件内容已经更新成功。
相关问题
if(record!=-1) { row=(pos+1)/20; column=(pos+1)%20-1; for(int j=0;j<F[record].size;j++) //清空磁盘 { Disk.filedata[row][column++] = NULL; if(column==20) { column=0; row++; } } Node* current = freeList; Node* recordNode = current; int count = 0;
这段代码实现了清空磁盘上被删除文件占用的空间。首先判断是否找到了要删除的文件,如果找到了,则计算文件的位置,即行数和列数。然后,使用一个嵌套的循环将该文件占用的磁盘空间逐个清空。在清空过程中,将变量 `row` 和 `column` 分别加 1,表示清空下一个字符的位置。
接下来,定义了两个指针变量 `current` 和 `recordNode`,分别指向空闲链表的头节点和记录位置的节点。同时,定义了一个计数器变量 `count`,用于记录当前连续空闲块的大小。
接着,使用一个循环遍历空闲链表,并记录当前可用的连续空间的大小到变量 `count` 中。如果 `count` 等于文件大小,说明找到了足够的连续空间,记录下位置并退出循环。
如果当前空闲块和下一个空闲块是连续的,则将 `count` 加 1。如果不连续,则将 `count` 重置为 1,并记录当前位置到 `recordNode` 中。
最后,将指向空闲链表的节点 `recordNode` 的 `next` 成员指向当前节点的 `next` 成员,从而删除已经被占用的空闲块。同时,将文件的大小记录到 `count` 变量中,表示释放了多少个连续空闲块。如果释放的空闲块大小不为 0,则将其添加到空闲链表中。
解释这段代码void fifthpart() //查找文件 { char ch4_1[20], ch4_2[100]; int i, j, record=-1,row, column; system("cls"); re: printf("查找文件\n"); printf("输入你要查找的文件名(长度不超过10):"); scanf("%s",ch4_1); //scanf获取输入文件名 if(strlen(ch4_1)>10) //检查文件名是否过长 { printf("文件名过长,请重新"); goto re; //过长返回标签re } for(i=0;i<10;i++) //循环遍历查找文件 { if(strcmp(F[i].name,ch4_1)==0) { record=i; //记录文件 break; } } if(record!=-1) { printf("此文件内容如下:\n"); //输出文件 row=(F[record].pos+1)/20; column=(F[record].pos+1)%20-1; for(int j=0;j<F[record].size;j++) { printf("%c",Disk.filedata[row][column++]); if(column==20) { column=0; row++; } } } else printf("未找到此文件\n"); goback(fifthpart); }
这段代码实现了一个查找文件的功能。具体来说,它首先提示用户输入要查找的文件名,然后检查文件名是否过长。接着,它遍历文件系统中的文件,如果找到了与输入文件名相同的文件,则记录该文件位置。最后,如果找到了该文件,则输出该文件的内容,否则输出未找到此文件。
这段代码使用了一个名为F的结构体数组来表示文件系统中的文件。每个文件由名称、大小和位置信息组成。位置信息表示文件内容在磁盘上的存储位置。具体来说,它包括一个磁盘块号和在该块中的偏移量。文件内容存储在名为Disk的全局变量的filedata数组中。
在输出文件内容时,该代码使用了一个双重循环来遍历文件内容。具体来说,它首先计算出文件内容在filedata数组中的行和列,然后输出每个字符,并更新行和列的值。如果列的值达到了20,它会将列重置为0,并将行加1。
最后,该代码调用了一个名为goback的函数,该函数用于返回上一级菜单。
需要注意的是,该代码的实现中使用了goto语句,这种做法不太优雅,可能会使代码的可读性和可维护性降低。
阅读全文