文件管理系统C++.docx

上传人:b****2 文档编号:2386089 上传时间:2022-10-29 格式:DOCX 页数:29 大小:454.59KB
下载 相关 举报
文件管理系统C++.docx_第1页
第1页 / 共29页
文件管理系统C++.docx_第2页
第2页 / 共29页
文件管理系统C++.docx_第3页
第3页 / 共29页
文件管理系统C++.docx_第4页
第4页 / 共29页
文件管理系统C++.docx_第5页
第5页 / 共29页
点击查看更多>>
下载资源
资源描述

文件管理系统C++.docx

《文件管理系统C++.docx》由会员分享,可在线阅读,更多相关《文件管理系统C++.docx(29页珍藏版)》请在冰豆网上搜索。

文件管理系统C++.docx

文件管理系统C++

 

一.课程设计目的及要求

深入了解文件管理系统,初步掌握文件管理系统的实现方法。

用高级语言编写和调试一个简单的文件系统,模拟文件管理的工作过程。

从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。

编写一程序,模拟一个简单的文件管理系统。

树型结构,目录下可以是目录,也可以是文件。

在此文件管理系统,可实现的操作有:

改变目录:

格式:

cd<目录名>

显示目录:

格式:

dir<目录名>

创建目录:

格式:

md<目录名>

删除目录:

格式:

rd<目录名>

新建文件:

格式:

edit<文件名>

删除文件:

格式:

del<文件名>

退出文件系统:

exit

 

二.相关知识

1.文件结构体

structFileNode

{

charfilename[FILENAME_LEN];//文件名/目录名

intisdir;//目录文件识别标志

inti_nlink;//文件的链接数

intadr;//文件的地址

structFileNode*parent,*child;//指向父亲的指针和指向左孩子的指针

structFileNode*sibling_prev,*sibling_next;//指向前一个兄弟的指针和指向

//后一个兄弟的指针.

};

整个文件系统采用二叉树型存储结构,初始化文件树如下:

图2-1初始目录树

2.所使用函数及其功能

intMain();//主函数

voidInit();//初始化文件树

intParseCommand();//接受输入的命令并把其分解成操作名和路径文件名

voidExecuteCommand();//执行命令,分别执行cd,edit,md,del,rd,dir,exit命令

intcdComd();//改变目录功能处理

inteditComd();//处理edit命令,即创建文件,只要创建表示文件的节点即可,内容及大小不考虑

intmdComd();//创建目录

intdelComd();//处理del命令,即删除指定文件,不存在是给出错误信息

intdirComd();//处理dir命令,显示目录

intrdComd();//删除目录

intFindFilename(charPara2[]);//查找文件名

structFileNode*CreateFileNode(charfilename[],intisdir,inti_nlink);//创建结点

intGetInput(char*buffer,unsignedintbuffer_len);//获取输入

3.所使用的变量

structFileNode*cp,*tp,*root;//*cp,*tp,*root是根目录节点

charpath[INPUT_LEN-COMMAND_LEN];//记录当前走过的路径

charPara1[COMMAND_LEN],Para2[INPUT_LEN-COMMAND_LEN];//para1数组存储输入的命令,para2数组存储输入的文件名

charfilename[FILENAME_LEN],tmp;

unsignedinti,j;

三题目分析

1.文件系统采用二叉树型存储结构,结点结构如下:

structFileNode

{

charfilename[FILENAME_LEN];//文件名/目录名

intisdir;//目录、文件的识别标志(0为文件,1为目录)

inti_nlink;//文件的链接数

//intadr;//文件的地址

structFileNode*parent,*child;//指向父亲的指针和指向左孩子的指针

structFileNode*sibling_prev,*sibling_next;//指向前一个兄弟的指针和指向后一个兄弟的指针.

};

2.目录名和文件名支持全路径名和相对路径名,路径名各分量间用“/”隔开

3.功能具体描述:

改变目录:

改变当前工作目录,目录不存在时给出出错信息

显示目录:

显示指定目录下或当前目录下所有文件和一级目录(选做:

带/s参数的dir命令,显示所有子目录)

创建目录:

在指定路径或当前路径下创建指定目录。

重名时给出错信息。

删除目录:

删除指定目录下所有文件和子目录。

要删目录不空时,要给出提示是否要删除。

创建文件:

创建指定名字的文件,只要创建表示文件的节点即可,内容及大小不考虑。

删除文件:

删除指定文件,不存在时给出出错信息。

退出文件系统:

exit

4、总体流程:

初始化文件目录;

输出提示符,等待接受命令,分析键入的命令;

对合法的命令,执行相应的处理程序,否则输出错误信息,继续等待新命令,直到键入EXIT退出为止。

四.概要设计

1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个简单的单用户文件系统。

2.文件存储空间的分配采用显式链接分配。

为了实现创建和删除文件必须要有一棵初始的文件树存在,以便在文件树的根节点下实现创建和删除文件。

3.数据结构与树结构。

数据结构是计算机存储、组织数据的方式。

数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

树是一种重要的非线性数据结构,直观地看,它是数据元素(在树中称为结点)按分支关系组织起来的结构,很象自然界中的树那样。

树中每个分叉点称为结点,起始结点称为树根,任意两个结点间的连接关系称为树枝,结点下面不再有分枝称为树叶。

结点的前趋结点称为该结点的"双亲",结点的后趋结点称为该结点的"孩子",同一结点的"孩子"之间互称"兄弟"。

4.文件目录结构采用多级目录结构。

为了简单起见,可以使用文件结构体,结构体内容包括:

文件名,文件目录识别标示,文件链接数,以及他的左孩子右孩子左兄弟右兄弟指

5.要有分解函数对输入的命令进行分解。

以识别那部分是哪部分是命令,哪部分是路径和文件名。

6.最后要有执行函数。

来执行输入的创建文件命令。

五.代码及流程

开始

初始化文件树

获取键盘输入

分解命令

执行命令

显示目录

退出

改变目录

删除目录文件

创建目录/文件

图5-1主函数流程图

2)edit()创建文件函数流程图

图5-2创建文件函数流程图

图5-3删除函数流程图

4)ParseCommand()分解命令函数流程图

图5-4分解命令函数流程图

5)改变目录函数rdComd()

图5-5改变目录函数流程图

源代码:

#include

#include

#include

#include

#include

#defineFILENAME_LEN21

#defineINPUT_LEN81

#defineCOMMAND_LEN11

usingnamespacestd;

voidInit();//初始化文件树

intParseCommand();//接受输入的命令并把其分解成操作名和路径文件名

voidExecuteCommand();//执行命令

intcdComd();//处理cd命令

inteditComd();//处理edit命令

intdelComd();//处理del命令

intdirComd();//处理dir命令

intmdComd();//处理md命令

intrdComd();//处理rd命令

intFindPath(char*ph);//寻找参数ph所指向的路径

intFindFilename(charPara2[]);//从参数Para2中找到要建立或删除的文件、目录名,并把指针只想其父亲结点

structFileNode*CreateFileNode(charfilename[],intisdir,inti_nlink);//创建结点

intGetInput(char*buffer,unsignedintbuffer_len);//获取输入

intCheckCommand();//命令检查

intGetDir(intbegin,char*path,char*curDir);//获取路径

structFileNode*cp,*tp,*root;

charpath[INPUT_LEN-COMMAND_LEN];//记录当前走过的路径

charPara1[COMMAND_LEN],Para2[INPUT_LEN-COMMAND_LEN];

charcurpath[INPUT_LEN-COMMAND_LEN],tmppath[INPUT_LEN-COMMAND_LEN];

charfilename[FILENAME_LEN],tmp;

unsignedinti,j;//inti,j;

structFileNode//结点结构

{

charfilename[FILENAME_LEN];//文件名/目录名

intisdir;//目录文件识别标志

inti_nlink;//文件的链接数

structFileNode*parent,*child;//指向父亲的指针和指向左孩子的指针

structFileNode*sibling_prev,*sibling_next;//指向前一个兄弟的指针和指向后一个兄弟的指针.

};

//创建结点

structFileNode*CreateFileNode(charfilename[],intisdir,inti_nlink){

structFileNode*node=(structFileNode*)malloc(sizeof(structFileNode));//申请结点空间

//相应内容赋初值

strcpy(node->filename,filename);

node->isdir=isdir;

node->i_nlink=i_nlink;

node->parent=NULL;

node->child=NULL;

node->sibling_prev=NULL;

node->sibling_next=NULL;

returnnode;

}

//初始化文件树

voidInit(){

structFileNode*binNode,*usrNode,

*unixNode,*etcNode,*libNode,*userNode,

*binNode2,*liuNode,*sunNode,*ftiNode;

strcpy(path,"/");//根目录写入当前路径

//创建文件树的结点

binNode=CreateFileNode("bin",1,0);

usrNode=CreateFileNode("usr",1,0);

unixNode=CreateFileNode("unix",0,0);

etcNode=CreateFileNode("etc",1,0);

libNode=CreateFileNode("lib",1,0);

userNode=CreateFileNode("user",1,0);

binNode2=CreateFileNode("bin",1,0);

liuNode=CreateFileNode("liu",1,0);

sunNode=CreateFileNode(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1