2022年操作系统课程设计文件管理 2.pdf
《2022年操作系统课程设计文件管理 2.pdf》由会员分享,可在线阅读,更多相关《2022年操作系统课程设计文件管理 2.pdf(20页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、#include stdio.h#include string.h#include malloc.h#include stdlib.h#define MAX 1000 struct file/*普通文件的结构体*/int type;/0无作用,当做一个空节点存在;1 为记录型文件;2 为执行文件/前两个变量为文件的权限设置,1 为允许操作,0 为不允许操作int write;/可写int read;/可读int length;/文件的长度char chMAX;typedef struct file File;typedef struct ffile/*定义文件类型的结构体*/int type;
2、/1为文件夹;2 为文件;char name20;/文件(夹)名字int open;/文件打开标志,0 为关,1 为开File iffile;/如果为文件时有的信息struct ffile*parent;/指向上一级文件的指针struct ffile*brother;/指向同级兄弟文件(夹)的指针struct ffile*child;/指向下一级文件(夹)的指针Ffile;typedef Ffile*FFile;/*typedef struct Open/*记录打开文件的结构体 char name20;/记录打开文件(夹)的名字FFile*add;/记录打开文件上一级文件地址的指针Open;*
3、/全局变量FFile user1;/用户 1 FFile user2;/用户 2 FFile copyf;/记录被复制文件(夹)的上一级文件地址/Open openf20;/记录打开文件的队列FFile init(void)/*初始化,创建根结点*/FFile c;名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 20 页 -c=(Ffile*)malloc(sizeof(Ffile);c-type=2;c-open=0;/c-iffile.type=2;c-iffile.write=1;c-iffile.read=1;c-iffile.length=0;strcpy(c-name
4、,file1);c-parent=NULL;c-child=NULL;c-brother=NULL;strcpy(c-iffile.ch,NULL);return(c);/*void initopen()int a,b;a=20;for(b=1;bchild;if(user=NULL)printf(该文件内没有任何文件(夹)。n);return;printf(n);for(;user!=NULL;)printf(name);if(user-type=2)/*if(user-iffile.type=1)printf(/记录型文件/);else printf(/执行文件/);*/名师资料总结-精品
5、资料欢迎下载-名师精心整理-第 2 页,共 20 页 -printf(/%dk,user-iffile.length);else printf(/文件夹);printf(n);user=user-brother;void creatf(FFile user)/*创建文件|文件夹*/FFile parent;char ch20;/FFile user0;/parent=(Ffile*)malloc(sizeof(Ffile);parent=user;printf(输入要创建文件(夹)的名字:n);scanf(%s,ch);if(user-child=NULL)user-child=(Ffile*
6、)malloc(sizeof(Ffile);user=user-child;else user=user-child;for(;)if(user-type=0)/开端的空结点,用新结点覆盖break;if(!strcmp(user-name,ch)printf(错误:该文件名已经存在,文件(夹)创建失败!n);return;if(user-brother=NULL)user-brother=(Ffile*)malloc(sizeof(Ffile);user=user-brother;break;user=user-brother;名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 2
7、0 页 -/设置新文件(夹)的信息strcpy(user-name,ch);printf(选择创建对象:1 文件夹;2 文件;n);scanf(%d,&user-type);user-open=0;if(user-type=2)/添加文件信息/printf(选择文件类型:1 记录型文件;2 执行文件;n);/scanf(%d,&user-iffile.type);printf(能否对文件进行读:0 禁止;1 允许;n);scanf(%d,&user-iffile.read);printf(能否对文件进行写:0 禁止;1 允许;n);scanf(%d,&user-iffile.write);/p
8、rintf(设置文件大小(单位:K):n);/scanf(%d,&user-iffile.length);user-iffile.length=0;strcpy(user-iffile.ch,NULL);user-brother=NULL;user-child=NULL;user-parent=parent;printf(文件创建成功!n);void deletechildtree(FFile user)/*删除子树-结合 deletefile();使用*/if(user-brother!=NULL)/从下到上,从右到左删除 deletechildtree(user-brother);if(u
9、ser-child!=NULL)deletechildtree(user-child);if(user!=NULL)free(user);void deletefile(FFile user,char ch20)/*删除文件|文件夹*/FFile p,parent;名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 20 页 -int a;parent=user;if(user-child=NULL)printf(错误:删除失败,该目录下没有可删除的文件(夹)!n);return;user=user-child;p=user;for(a=1;a+)/找出要删除文件的所在位置 if(!
10、strcmp(user-name,ch)break;if(user-brother=NULL)printf(错误:删除失败,当前位置没有该文件!n);return;if(a1)p=user;user=user-brother;if(user-open=1)/判断文件的开关情况 printf(错误:删除失败,选择文件处于打开状态!n);return;if(p=user)/被删文件在文件队列的开头 if(user-brother=NULL)/该文件队列只有有一个文件 parent-child=NULL;if(user-child!=NULL)/删除的是文件(夹)子树 deletechildtree
11、(user);else free(user);/删除的是文件(夹)结点 printf(删除成功!n);return;/文件队列有多个文件p=user-brother;名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 20 页 -parent-child=p;p-parent=parent;if(user-child!=NULL)deletechildtree(user);else free(user);printf(删除成功!n);return;else/被删文件不在队列开头 if(user-brother=NULL)/被删文件在文件队列最末尾 p-brother=NULL;if(
12、user-child!=NULL)deletechildtree(user);else free(user);printf(删除成功!n);return;/被删文件在文件队列中间p-brother=user-brother;if(user-child!=NULL)deletechildtree(user);else free(user);printf(删除成功!n);FFile openfolder(FFile user)/*打开文件夹*/名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 20 页 -/int a,b;/a=0;/*if(user-child=NULL)user-c
13、hild=(Ffile*)malloc(sizeof(Ffile);user-child-type=0;user-child-brother=NULL;user-child-parent=user;user-child-child=NULL;/*for(b=1;bopen=1;/设置文件为打开/strcpy(openfb.name,user-name);/openfb.add=user;printf(文件夹打开成功。n);return(user);/返回被打开的文件夹的地址 void openfile(FFile user)/*打开普通文件*/if(user-open=1)printf(错误:
14、打开失败,此文件已经被打开!n);return;user-open=1;printf(普通文件打开成功!n);名师资料总结-精品资料欢迎下载-名师精心整理-第 7 页,共 20 页 -FFile openff(FFile user)/*打开文件(夹)*/char ch20;FFile parent;int a;printf(选择要打开的文件名:n);scanf(%s,ch);parent=user;if(user-child=NULL)printf(错误:打开失败,该目录下没有可打开的文件(夹)!n);return(parent);user=user-child;for(a=1;a+)/找出要
15、打开文件的所在位置 if(!strcmp(user-name,ch)break;if(user-brother=NULL)printf(错误:打开失败,当前位置没有该文件!n);return(parent);user=user-brother;if(user-type=1)printf(开始打开文件夹。n);user=openfolder(user);else if(user-type=2)printf(开始打开普通文件。n);openfile(user);user=user-parent;return(user);void closefile(FFile user)/*关闭普通文件*/名师资
16、料总结-精品资料欢迎下载-名师精心整理-第 8 页,共 20 页 -char ch20;int a;printf(选择要打开的文件名:n);scanf(%s,ch);if(user-child=NULL)printf(错误:关闭失败,该目录下没有可关闭的文件!n);return;user=user-child;for(a=1;a+)/找出要关闭文件的所在位置 if(!strcmp(user-name,ch)break;if(user-brother=NULL)printf(错误:关闭失败,当前位置没有该文件!n);return;user=user-brother;if(user-open=0)
17、printf(错误:关闭失败,该文件已经是关闭状态!n);return;user-open=0;printf(文件已经成功关闭!);/*没有文件夹关闭原因:文件夹一打开就会跳向打开的新文件里而文件夹关闭就会直接返回上一级的目录,若想整个文件夹都关闭,直接退出就可以了因此不会直接关闭某个特定的文件*/FFile backf(FFile user)/*返回上一层目录*/if(user-parent=NULL)printf(错误:返回失败,此处是最顶层目录!n);return(user);名师资料总结-精品资料欢迎下载-名师精心整理-第 9 页,共 20 页 -user-open=0;user=us
18、er-parent;return(user);void readfile(FFile user)/*读文件*/char ch20;int a;printf(选择要读取的文件名:n);scanf(%s,ch);if(user-child=NULL)printf(错误:读取失败,该目录下没有可读取的文件!n);return;user=user-child;for(a=1;a+)/找出要读取文件的所在位置 if(!strcmp(user-name,ch)break;if(user-brother=NULL)printf(错误:读取失败,当前位置没有该文件!n);return;user=user-br
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统课程设计文件管理 2022 操作系统 课程设计 文件 管理
限制150内