1 / 17

模拟文件管理系统

模拟文件管理系统. 操作系统课程设计汇报二 计科 31 第二组. 流程图. 开始. 初始化 读取用户目录. 菜单选择. 创建文件. 删除文件. 退出. 创建目录. 显示目录. 改变目录. 保存用户目录. 结束. 主要数据结构. 文件控制块 typedef struct FCB { string name; // 文件名 int type; // 标致: 0 表示目录, 1 表示文件 int size; // 如果是文件则表示文件大小 struct FCB *firstchild; // 指向第一个孩子结点

aisha
Download Presentation

模拟文件管理系统

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 模拟文件管理系统 操作系统课程设计汇报二 计科31第二组

  2. 流程图 开始 初始化 读取用户目录 菜单选择 创建文件 删除文件 退出 创建目录 显示目录 改变目录 保存用户目录 结束

  3. 主要数据结构 • 文件控制块 • typedef struct FCB { • string name; //文件名 • int type; //标致:0表示目录,1表示文件 • int size; //如果是文件则表示文件大小 • struct FCB *firstchild; //指向第一个孩子结点 • struct FCB *nextsibling; //指向下一个兄弟结点 • struct FCB *parent; //指向父结点 • }FCB, *FCBnode;

  4. 用户当前数据结构 • typedef struct USER { • string username; //用户名 • FCBnode workdir; //当前工作目录或文件指针 • string path; //当前路径 • }USER, *USERnode;

  5. 主要算法 • 邢自成:创建文件、删除文件 • 叶林:显示目录、改变目录 • 张鹰:创建目录

  6. 保存读取目录树 • //-----------将目录树保存到文件------------ • void SaveTree(FCBnode root,FILE *fp) { • if (root) { • fwrite(root,sizeof(struct FCB),1,fp); • SaveTree(root->firstchild,fp); • SaveTree(root->nextsibling,fp); • } • } • void Save(FCB *root) { • FILE *fp; • if((fp=fopen("user","wb+"))==NULL) { • cout<<"Cannot open file"; • } • SaveTree(root,fp); • fclose(fp); • }

  7. //------------将目录树从文件中读出来--------------//------------将目录树从文件中读出来-------------- • void LoadTree(FCBnode p,FILE *fp) { • FCB q; • if (p->firstchild) { • fread(&q,sizeof(struct FCB),1,fp); • p->firstchild=&q; • LoadTree(&q,fp); • } • if (p->nextsibling) { • fread(&q,sizeof(struct FCB),1,fp); • p->nextsibling=&q; • LoadTree(&q,fp); • } • } • void Load() { • FILE *fp; • FCB p; • if((fp=fopen("user","rb+"))==NULL) { • cout<<"Cannot open file"; • } • fread(&p,sizeof(struct FCB),1,fp); //读用户根目录 • show(&p); • LoadTree(root,fp); • fclose(fp); • }

  8. 主要完成部分: 创建文件算法 create(string name){} 删除文件算法 deletefile(string name) {}

  9. create(string name)是创建文件函数,在DOS界面下输入create “文件名”,如果当前目录树的第一个孩子节点为空,就把“文件名”赋给这个孩子节点,输出“文件创建成功”提示信息。如果孩子节点的名字和要创建的文件名相同,就输出“文件已经存在!创建失败!”如果这个孩子节点不空且与要创建的名字不同,就检查下一个节点,如果为空,则创建成功。

  10. deletefile(string name)是删除文件函数,在DOS界面下输入deletefile “文件名”,如果当前目录孩子节点为空,说明该目录下没有文件,则输出“无此文件!”。如果找到匹配的文件,则执行删除。

  11. 创建目录 • 创建目录的流程如下: • 先创建一个FCB,并且将文件连接到目录树上 • 指针指向目录树的第一个孩子结点 • 当目录命不存在时,创建成功 • 当创建失败后指针指向兄弟结点 • 当目录命不存在时,创建成功

  12. 流程图 建立一个FCB 连接到目录树 指向 当目录名存在时 第一个孩子结点 目录命存在时 指向兄弟结点 目录名不存在时 建立目录 结束

  13. 开始 列出文件目录 指向第一个孩子结点 判断结点指针是否为空 否 判断结点类型 是 P=0 P=1 显示当前目录下的目录名 指向下一个兄弟结点 显示文件名 结束

  14. cd(string name) 改变当前目录的函数,当前目录的第一个结点是否与需要改变目录的名字“name”相同,如果结点为空,则输出“目录不存在!”,跳出;如果结点的名字与需要改变的名字相同,则进入\ “name”这个目录下面,则输出“目录已经改变!”;如果不同,则指针指向当前目录的下一结点,然后判断是否需要改变目录的名字“name”相同,重复以上步骤。

  15. 进展情况 • 完成DOS下的程序。如图:

  16. 正在用MFC封装。如图:

More Related