您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 操作系统-模拟文件管理-大作业
课程设计二:模拟文件管理一.设计目的(1)建立一个简单的模拟文件管理系统。(2)理解用户界面和操作命令在操作系统中的作用。二.设计要求需要实现一个命令行操作界面,包含如下命令:1.创建文件功能:创立一个指定名字的新文件,即在目录中增加一项,不考虑文件内容,但必须能输入文件长度。2.删除文件功能:删除指定的文件3.创建目录功能:在当前路径下创建指定的目录。4.删除目录功能:删除当前目录下的指定目录,如果该目录为空,则可删除,否则应提示是否作删除,删除操作将该目录下的全部文件和子目录都删除。5.改变目录功能:工作目录转移到指定的目录下,只要求完成改变到当前目录的某一个子目录下的功能,不要求实现相对目录以及绝对目录。6.显示目录功能:显示全部目录以及文件,输出时要求先输出接近根的目录,再输出子目录。对于重名(创建时),文件不存在(删除时),目录不存在(改变目录时)等错误情况,程序应该作出相应处理并给出错误信息。界面的提示符为#,提示的命令以及调试的方法应和前面的要求一致,可以自己设计更多的命令或者附加功能。三.环境本实验是在windowsxp+vc6.0环境下实现的,利用windowsSDK提供的系统接口(API)完成程序功能。在windowsxp下安装好VC后进行,VC是一个集成开发环境,其中包含了windowsSDK所有工具,所以就不用单独在安装SDK了,程序中所用的API是操作系统提供的用来进行应用程序设计的系统功能接口。要使用这些API,需要包含对这些函数进行说明的SDK头文件,最常见的就是windows.h。一些特殊的API调用还需要包含其他的头文件。四.步骤1.打开VC,选择菜单项File-New,选择Project选项卡并建立一个名为filesys的win32consoleapplication工程。2.在工程中创建原文件filesys.cpp:选择菜单项Project-AddtoProject-File,此时将打开一个新窗口,在其中输入想要创建的文件名字,这里是filesys.cpp,在其中编辑好原文件并保存。3.通过调用菜单项Build-Rebuildall进行编译连接,可以在指定的工程目录下得到debug-filesys.exe程序,可以在控制台进入该debug目录运行程序了。五.源代码程序:#includestdio.h#includeiostream#includestring.h#includectype.h#includestdlib.h#defineFILENAME_LEN21#defineINPUT_LEN81#defineCOMMAND_LEN11usingnamespacestd;//结点结构structFileNode{charfilename[FILENAME_LEN];//文件名/目录名intisdir;//目录文件识别标志inti_nlink;//文件的链接数intadr;//文件的地址structFileNode*parent,*child;//指向父亲的指针和指向左孩子的指针structFileNode*sibling_prev,*sibling_next;//指向前一个兄弟的指针和指向//后一个兄弟的指针.};voidInit();//初始化文件树intParseCommand();//接受输入的命令并把其分解成操作名和路径文件名voidExecuteCommand();//执行命令intcdComd();//处理cd命令intcreatComd();//处理creat命令intdelComd();//处理del命令intdirComd();//处理dir命令intmdComd();//处理md命令intrdComd();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);//获取路径voidTrim(char*str);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;//主函数intmain(){printf(模拟文件管理系统\n);printf(\ncd改变目录;creat创建文件;del删除文件;\n);printf(dir显示目录;md创建目录;rd删除目录;exit退出.\n);printf(\n--------------------------------------------------------------------------------\n);Init();//初始化文件树while(1){//printf(#);if(ParseCommand())//分解命令ExecuteCommand();//执行命令}return0;}//执行命令子函数voidExecuteCommand(){intsign;//根据参数Para1调用相应的功能处理模块if(strcmp(Para1,cd)==0)sign=cdComd();//cd命令elseif(strcmp(Para1,creat)==0)sign=creatComd();//edit命令elseif(strcmp(Para1,md)==0)sign=mdComd();elseif(strcmp(Para1,del)==0)sign=delComd();//del命令elseif(strcmp(Para1,rd)==0)sign=rdComd();elseif(strcmp(Para1,dir)==0)sign=dirComd();//dir命令elseif(strcmp(Para1,exit)==0)exit(0);//exit命令elseprintf(命令错误,请重试\n);//命令输入不正确,报错}//创建结点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*dir1Node,*dir2Node,*file1Node,*etcNode,*libNode,*userNode,*binNode2,*liuNode,*sunNode,*ftiNode;strcpy(path,/);//根目录写入当前路径//创建文件树的结点dir1Node=CreateFileNode(dir1,1,0);dir2Node=CreateFileNode(dir2,1,0);file1Node=CreateFileNode(file1,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(sun,1,0);ftiNode=CreateFileNode(fti,1,0);cp=tp=root=CreateFileNode(/,1,0);//结点相应内容赋值root-parent=NULL;root-child=dir1Node;root-sibling_prev=root-sibling_next=NULL;dir1Node-parent=root;dir1Node-child=NULL;dir1Node-sibling_prev=NULL;dir1Node-sibling_next=dir2Node;dir2Node-parent=NULL;dir2Node-child=libNode;dir2Node-sibling_prev=dir1Node;dir2Node-sibling_next=file1Node;file1Node-parent=NULL;file1Node-child=NULL;file1Node-sibling_prev=dir2Node;file1Node-sibling_next=etcNode;etcNode-parent=NULL;etcNode-child=NULL;etcNode-sibling_prev=file1Node;etcNode-sibling_next=NULL;libNode-parent=dir2Node;libNode-child=liuNode;libNode-sibling_prev=NULL;libNode-sibling_next=userNode;userNode-parent=NULL;userNode-child=NULL;userNode-sibling_prev=libNode;userNode-sibling_next=binNode2;binNode2-parent=NULL;binNode2-child=NULL;binNode2-sibling_prev=userNode;binNode2-sibling_next=NULL;liuNode-parent=libNode;liuNode-child=NULL;liuNode-sibling_prev=NULL;liuNode-sibling_next=sunNode;sunNode-parent=NULL;sunNode-child=NULL;sunNode-sibling_prev=liuNode;sunNode-sibling_next=ftiNode;ftiNode-parent=NULL;ftiNode-child=NULL;ftiNode-sibling_prev=sunNode;ftiNode-sibling_next=NULL;}//获取文件或目录名,并把指针指向其父亲结点intFindFilename(charPara2[]){i=strlen(Para2)-1;j=0;while(Para2[i]!='/'&&i=0){filename[j]=Para2[i];i--;j++;}filename[j]='\0';//获得逆序的文件或目
本文标题:操作系统-模拟文件管理-大作业
链接地址:https://www.777doc.com/doc-5961737 .html