- 1、本文档共17页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
树型目录文件系统
设计思想:
本课程设计目的是实现树型目录结构文件系统,本人在实现过程中也利用二叉树,
其中每个节点都有父指针,子指针和兄弟指针,其中子指针指向该目录下的第一个子节点,而该子节点的父指针则指向它的上级目录。目录下各子节点用兄弟指针连接起来。
文件夹打开是则把文件夹名称及其地址压入打开文件夹栈,文件关闭则把文件夹名称及其地址从打开文件夹栈中抛出。
文件打开则把文件的名称及其父指针写到文件列表同时置文件打开标志为1,文件关闭则把文件从打开列表中删除,同时置文件打开指针为0,文件读取和写入都要检查文件是否在文件打开列表中,未打开文件不能读写,只读文件不能写,只写文件不能读。
文件夹和文件创建,文件夹和文件的创建首先检验目录是否为空,为空则把文件夹或文件连接到该目录下,不为空则把检查目录下是否有同名文件夹或文件,有则提示创建不成功,没有则把文件夹或文件连接到该目录下的最后一个子节点,作为它的兄弟节点。
文件夹和文件的删除,文件夹下没有打开的文件或文件没有打开才能删除,否则删除失败,删除文件夹时利用了中序历遍来删除子树。
系统结构说明
系统结构如下图:
root为根结点,root下有五个用户,每个用户有自己的文件夹或文件,系统初始化时为每个用户创建一个file1文件。文件夹内容只有名称和打开标志。文件除了名称和打开标志,还有文件的访问权限,文件类型以及文件长度。其中文件的访问权限、文件类型、文件长度单独作为一个结构体,其它和文件夹结构体相同,也同用一个结构体。
打开文件列表的结构体包括文件名和文件的父节点地址,打开文件夹的栈中包括文件夹名称及其地址
数据结构的说明struct file{
char type; //文件类型0-文本文件 1-可执行文件 2-记录型文件
char right; //文件的权限0-可读 1-可写 2-可读可写
int f_length; //文件长度
};
typedef struct file File;
//文件夹或文件的结构体
struct FCB {
char kind; //kind=1为文件夹 kind=2为文件
char name[20]; //文件夹或文件名称
bool open;
File if_file;
struct FCB *parent;
struct FCB *brother;
struct FCB *child;
};
typedef struct FCB Ff;
//root和fcp为全局变量
Ff *root;//根节点
Ff *fcp=null;//判断是否有拷贝文件
//打开项的结构体
typedef struct{
char name[20];//名称
Ff *node; //指针,打开的是文件夹记录文件夹的地址,是文件记录文件的父节点地
}opened;
int OPFO=0; //记录文件夹打开数目,最多20
opened folderopened[20];//记录文件打开文件夹
int OPFI=0; //记录文件打开数目,最多20
opened fileopened[20];//记录打开文件
函数清单及部分函数流程图
//函数声明/////////////////////////////
void init();//初始化创建根节点
void initopen();//初始化打开文件列表或打开文件夹文件列表
Ff* creat(Ff *parent,char name[20],char kind);//创建文件或文件夹
void delet(Ff *parent,char delname[20],char kind);//删除文件文件夹
void delSub(Ff *delp); //删除子树(配合删除文件夹使用)
void openfolder(Ff *parent, char name[20]);//打开文件夹
void openfile(Ff *parent, char name[20]);//打开文件
void closefo(); //关闭文件夹
void closefile(char name[20]); //关闭文件
void read(Ff*parent,char name[20]); //读文件
void write(char name[20]); // 写文件
void show(); //显示初始界面
voi
文档评论(0)