多用户多目录文件系统(实验报告、完整源代码版)_第1页
多用户多目录文件系统(实验报告、完整源代码版)_第2页
多用户多目录文件系统(实验报告、完整源代码版)_第3页
多用户多目录文件系统(实验报告、完整源代码版)_第4页
多用户多目录文件系统(实验报告、完整源代码版)_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、广东工业大学课程设计任务书(源代码在附录)题目名称多用户多级目录文件系统的实现学生学院计算机学院专业班级2008级软件工程2班6900一、课程设计的内容本课程设计要求设计一个模拟的多用户多级目录的文件系统。 通过具体的文 件存储空间的管理、文件的物理结构、 目录结构和文件操作的实现,加深对文件 系统内部功能和实现过程的理解。二、课程设计的要求与数据1. 在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多 目录的文件系统。2. 文件物理结构可采用显式链接或其他方法。3. 磁盘空闲空间的管理可选择位示图或其他方法。如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位

2、示图合并到FAT中。4 .文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。目录组织方式 可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。(1)(2)(3)(4)(5)(6)(7)(8)(9)5.设计一个较实用的用户界面,方便用户使用。要求提供以下相关文件操作: 具有login (用户登录)createopen read write close delete系统初始化(建文件卷、提供登录模块) 文件的创建: 文件的打开: 文件的读: 文件的写: 文件关闭: 删除文件: 创建目录(建立子目录): mkdir(1

3、0)改变当前目录:cd(11)列出文件目录:dir(12)退出:logout6.系统必须可实际演示,选用程序设计语言:C+ +、C等。1.11.21.31.42.12.22.32.42.53.13.23.33.43.53.63.73.83.9设计思想说明设计环境设计思想存储空间管理目录结构数据结构虚拟磁盘用户的数据文件目录文件管理目录文件的类管理用户的类功能实现登陆系统系统初始化文件的创建文件的打开文件删除文件的读创建目录查看当前目录删除目录3.10返回上一级目录3.11退出四、操作思想五、界面演示5.1登陆界面5.2管理员登陆成功后的界面5.3用户登陆成功后的界面八、系统具体运行演示6.1文

4、件的创建与查看(读文件)6.2目录的创建与查看6.3文件系统空间的查看七、实验体会八、收集的资料及主要参考文献目录11一、设计思想说明1.1设计环境a)程序设计语言:C+语言b)计算机及操作系统:PC机,WindowsXPc)开发平台:Microsoft Visual C+ 6.0 企业版d)运行平台:PC机,WindowsXP1.2设计思想文件系统是操作系统中负责管理和存取文件信息的机构, 它具有“按名存取” 的功能。文件系统主要实现对具体的文件存取空间的管理、文件的物理结构、 目 录结构管理和文件操作。本实验中的文件系统是多用户多级目录的文件系统。实验中定义用户的上限为5个,目录结构采用多

5、级目录结构。1.3存储空间管理系统中的数据文件,需要为之分配磁盘空间。采用模拟方法,虚拟磁盘为一 个10000大小的一维数组:disk_block10000 ,0表示空闲,1表示已分配出去。使用混合索引分配方式来为存储文件分配所在外存的块号: 当文件大小较小 时,采用直接地址,索引结点的每项存放文件数据的盘块的盘块号; 当文件大小 较大时,采用一次间接地址,即一级索引;当文件非常大时,采用多次间接地址, 即二级索引。为了提咼即树形目录 如下图所1.4目录结构目录结构的组织,关系到文件系统的存取速度、安全性、共享性。 目录的检索速度和文件系统的性能, 采用了多目录结构来组织目录, 结构,主目录称

6、为根目录,数据文件为树叶,其他的目录为树的结点。示。二、数据结构2.1虚拟磁盘,初始化时所有盘块置 0初始化所有磁盘块为空闲for(i=0;i<10000;i+) disk_blocki=0; disk_e mp ty=10000;/22用户的数据文件,即树叶typ edef struct UFDchar n ame10;int attribute;int len gth;int a10;int *p1;int (*p 2)100; struct UFD *n ext;UFD;/2.32.4存储文件信息文件名属性 长度/为文件本身分配10个空间 一级索引,100个空间/二级索引,100*

7、100个空间/文件链的下一结点目录文件,即树结构中树的结点typ edef struct DIRDIR* above; char n ame10; int len gth;DIR *n ext;UFD *File_head;DIR *Dir_head;DIR;/存储目录信息/上一结点目录名目录的大小下一结点此目录下的文件指针此目录下目录链表指针/管理目录文件的类,每个用户都是其的对象class Cuse/定义管理用户目录的类DIR *now;UFD *Fhead;DIR *Dhead;/当前目录/文件的头结点/根目录的目录链头结点char code10; char n ame10; int l

8、en gth; int status;public:/ /代码省略/密码用户名用户空间大小是否获得空间/ 2.5管理用户的类,管理员是其的对象/用户类class Cdisk public:Cuse user5;char code10;int dis_disk();/int first_dele_user();/int dele_user(i nt);/int n ew_user();/int set_code();int log in( char);/用户个数最多为5/管理员密码 显示磁盘的使用情况删除用户的准备工作 具体实现删除用户查看当前用户与外存空间使用情况,后创建新用户 /设置新密码/

9、登陆Cdisk();/构造函数virtualCdisk();/ 虚函数,析构;三、功能实现3.1登陆系统系统中设置了管理员和用户两种登陆模式。管理员的用户名为“管理员”, 默认密码为123,可以后期修改密码。用户初始化时不存在,在登陆时系统发现 不存在任何用户则自动要求用户先注册一用户,并在注册成功后为用户登陆。3.2系统初始化(建文件卷、提供登录模块)for(i=0;i<10000;i+)/初始化所有磁盘块为空闲disk_blocki=0;disk_e mp ty=10000;int Cdisk:log in( char b)/登陆3.33.43.53.6文件的创建:int Cuse:

10、 new_file() 文件的打开:openint Cuse:o pen _file() 文件删除:int Cuse:first_dele_file() int Cuse:dele_file(UFD *f) / 文件的读:int Cuse:dis_file()/建立新文件/打开文件/删除文件的前面工作 具体实现删除文件查看文件3.73.8创建目录(建立子目录):int Cuse:new_dir() 查看当前目录:int Cuse:dis_dir(DIR *d)/ /int Cuse:dis_ no w()DIR *Cuse:get_ no w() / 删除目录:int Cuse:first_d

11、ele_dir() int Cuse:dele_dir(DIR *p) 3.10 返回上一级目录:int Cuse:goback() 3.11退出:在主菜单中用flag标记实现3.9/建立新目录显示目录显示当前目录得到当前目录路径/删除目录的前奏/具体实现删除目录的工作/向上返回四、操作思想(创建)后,将自动获得一个根各个用户的名字不能相同。在每个用户注册目录(root ),在此目录中,可以创建多个目录(同一父目录下,不能同名)和 多个数据文件。在root目录里,进入一个新建的子目录,则又可以在此子目录里创建多个 目录和数据文件。依次类推,实现树形结构。但同一父目录下,目录项和数据文 件都不能

12、重名。五、界面演示5.1登陆界面陆眷陆统理户出晴输入选择:5.2管理员登陆成功后的界面筲理员登陆成功IJ hrf .1 dv-w-vJI." " " 1. 户口 盾窗 户户前码陆 用暫密登 建回 创删查修返gS*:usei*5.3用户登陆成功后的界面在该界面中,功能选择菜单正面显示了用户名为“user",并同时显示了当前所处的目录为根目录“ root”。此处,如当前处在多级目录里,将把目录路径 详细列出,用到的实现函数为D.user n.dis_dir(D.user n.get_ no w();如下图所示。root d dd ddd六、系统具体运行演示6

13、.1文件的创建与查看(读文件)请输入建立的文件名:FilE七度;12属性只读,1:读写” 0请输入要查看的文件名*ile比为只谏文fr,占用硬盘块号如下3LO1 2116.2目录的创建与查看g录名称A3 盟 rill A包含如下目录:目录大入0Q0&課象包墙辣Fllel file29012文件属性1&6.3文件系统空间的查看管理员登陆成功!户口 用窗 户户前码陆 用彎密登 建屠改回 创删查僂返用户名 userl u.ser2 usep3请选择:占用空间大小21200212 9788七、实验体会本次课程设计是利用C+程序语言编写的,由于对 C+的自学不够深,导致 在调试与编译时出

14、现了很大的困难,但在有关 C+实践指导书的帮助下,许多问 题都逐步得到了解决。文件系统的要求的功能很多,程序很长。但此次实验无疑是对我C+知识的一次磨练,使得我深深体会到它在实现对象操作和相关数据封 闭操作的好处。在设计此系统时,方发觉自己对文件系统理解得不够透彻。 例如在考虑如何 实现多用户多目录时,差点就走进了如何在二级目录里实现的死胡同。后来, 耐 心回到这学期学习的课本内容上,才醒悟要利用树形结构。不然, 是无法实现多 用户情况下的多目录多文件层层嵌套。如何保证在子目录里进行文件操作 (数据文件的创建、删除)时造成的当前 目录空间大小变化同步更新到先辈目录的空间大小,这困扰了我很久。在

15、参考了操作系统实验教程后,利用了目录类中的 above (指向上一目录结点),当前目录空间变化时,即循环向上同步变化先辈目录的大小,直到根目录为止。另外,实验中用到了 now (目录指针)来指向当前所处的目录。在同一目录下,如何实现多目录或多数据文件的保存, 实验时我先是用数组 结构,但后来发觉用指针链表更为方便,因为这样就不必限制数据文件和子目录 的个数,虽然指针对内存的申请、释放掌握要求更为严格。总而言之,操作系统的课程设计,不仅提升了自己的程序设计及编写技巧, 更大大地加深了对操作系统的文件管理的了解。八、收集的资料及主要参考文献123计算机操作系统,汤小丹等,西安电子科技大学出版社 操

16、作系统实验指导书,傅秀芬,广东工业大学(自编) 操作系统实验教程,袁宝华,清华大学出版社4 C+上机实践指导教程(第三版),Nell Dale著,马树奇译,电子工业出版社附录:)!/此程序包含三个源代码文件!(disk.h, disk.cpp, menu.cpp/调试与编译环境:VC+6.0 /C+/主源代码文件为disk.cpp / /*disk h*/disk.h,磁盘头文件,虚拟/以下的是对 VC编译器的检查 #if !defined(AFX DISK H 1FAB24AE C718 49FF A915 94211192B8BC INCLUDED ) #define AFX DISK H

17、 1FAB24AE C718 49FF A915 94211192B8BC INCLUDED./VC+ 6.0=1200 #if MSC VER>1000 #pragma once #en dif /_MSC_VER>1000 extern int disk_block10000; exter n int disk_e mp ty;17typ edef struct UFD/存储文件信息char n ame10;int attribute;/文件名属性in t le ngth;/长度/int a10;int *p1;in t (* p2)100; struct UFD *n ext

18、;为文件本身分配/ 一级索引,/二级索引,10个空间100个空间 100*100个空间/UFD;存储目录信息typ edef struct DIRDIR* above;/上一结点char n ame10; in t le ngth;DIR *n ext;/UFD *File_head;/下一结点此目录下的文件指针DIR *Dir_head;/此目录下目录链表指针DIR;DIR *now;UFD *Fhead;/DIR *Dhead;/public:;char code10; char n ame10; in t le ngth;int status;/当前目录文件的头结点根目录的目录链头结点密

19、码用户名用户空间大小是否获得空间void set_status(i nt);int dele_user();int dis_file();int dis_dir(DIR *d);/int get_le ngth();char const *get_ name(); char const *get_code();int get_status();int set_user(char *,char *);/ DIR *get_ no w();int dele_file(UFD *f);int dele_dir(DIR*);Cuse();Cuse();int goback();int dis_ no

20、w();int n ew_file();int n ew_dir();int open _dir();int open _file();int first_dele_file();int first_dele_dir();int set_code();/显示文件所占外存块号当前路径设置用户名与密码/删除文件删除目录构造析构返回上级 显示当前目录删除文件的前部分工作删除目录的前部分工作class Cdisk public:/用户类Cuse user5;char code10;int dis_disk();int first_dele_user();int dele_user(i nt);/用户个

21、数最多为5int n ew_user();/查看当前用户与外存空间使用情况,后创建新用int set_code(); in t logi n( char); Cdisk(); virtualCdisk();/;#en dif设置新密码II登陆虚函数,析构!defi ned(AFX DISK H 1FAB24AE C718 49FF A915 94211192B8BC INCLUDED )II*disk cpp*#i nclude"disk.h"#in clude"me nu.cpp"#in clude<stri ng.h>#in clude&

22、lt;stdlib.h>#in clude<iostream.h>#i ncludevioma nip .h> in tdisk_block10000;int disk_e mpty;Cdisk:Cdisk() 管理磁盘的类,构造函数int i=0;char code10="123456" for(i=0;i<10000;i+)disk_blocki=0;/初始化所有磁盘块为空闲IIthis->user0.set_user("stude nt","123");/ disk_e mp ty=10000

23、;cout.setf(ios:left);/设置输出方式默认一个用户Cdisk:Cdisk()/析构int Cdisk:dele_user(i nt i)/Cdisk 类 dele user 的构造Cuse C;C=useri;useri.dele_user();II调用Cuse类的成员函数int dele_user()return 1;int Cdisk:dis_disk()/检查磁盘信息int i=0;cout<<setw(14)<<" 用户名"<<setw(14)<<"占用空间大小"<<e

24、ndl; for(i=0;i<5;i+)/存在的用户的信息if(useri.get_status()=1)cout<<setw(14)<<useri.get_ name()<<setw(14)<<useri.get_le ngth()<<e ndl;cout<<"已用空间:"<<10000-disk_empty<<endl<<"剩余空间:"<<disk_e mp ty<<e ndl;return 1;/登陆int Cd

25、isk:logi n( char b)char n10,c10;int i;if(b='1')cout<<"用户:管理员"<<endl;cout<<"密码:默认 n"<<endl;system( "p ause");return 1;elseif(!user0.get_status()i=0;cout<<"当前用户为空,/当前不存在用户欢迎注册!useri.set_status(1); cout<<"请输入用户名:"&

26、lt;<e ndl;/"<<e ndl;为新用户分配权利cin>>n;cout<<"请输入密码:"<<e ndl;cin>>c;useri.set_user( n,c);/调用Cuse的成员函数,传递用户名与密码"<<e ndl;cout<<"恭喜,创建用户成功!return i;12elsecout<<"用户名:" cin>>n;H.cout<<"密码: cin>>c;cout

27、<<e ndl;19for(i=0;i<5;i+)/查找是否存在此用户if(useri.get_status()if(!strcm p(n, useri.get_ name()/存在方比较/相等时为0,此判断为匹/密码匹配if(!strcm p( c,useri.get_code()cout<<"cout<<"登陆成功! "<<e ndl;欢迎"<<useri.get_name()<<"登陆"<<endl;return i; elsecout&l

28、t;<"密码错误"<<endl;return -1;cout<<"此用户不存在! "<<endl;return -1;int Cdisk:set_code()/设置新密码char temp 110,te mp 210; cout<<"请输入原密码"<<endl;/无疑是针对当前用户进行操作,故直接 codecin> >te mp1;if(strc mp (te mp 1,code)cout<<"原密码错误!"<<e

29、ndl;return 0; while(1)cout<<"请输入新密码:"<<endl;cin> >te mp1;cout<<"请再次输入新密码:"<<endl;cin> >te mp2;if(strc mp (te mp 1,te mp 2)cout<<"两次密码不相同,请重输 !"<<endl; break;strc py (code,te mp 1); break; cout<<"密码设置成功!"<

30、;<endl;/保存新密码return 1;int Cdisk: new_user()/准备创建新用户char n10,c10;int i=0,j; for(i=0;i<5;i+)if(useri.get_status()=0)/是否有此用户,此尚未存在break;if(i=5)cout<<"已经达到最大用户5个,不能再创建!"<<endl;return 0;useri.set_status(1);cout<<"请输入用户名:"<<endl;/为新用户分配权利cin>>n;if(i&

31、gt;0)for(j=0;j<i-1;j+)if(!strc mp (userj.get_ name(), n)/已有其它用户存在cout<<"此用户名已存在!"<<endl;return 0; cout<<"请输入密码:"<<e ndl;cin>>c;/调用Cuse的成员函数,传递用户名与密码"<<e ndl;/删除用户useri.set_user( n,c);cout<<"恭喜,创建用户成功!return 1;int Cdisk:first_

32、dele_user()char n10,c;int i;cout<<"请输入你要删除的用户名"<<endl;cin>>n;for(i=0;i<5;i+)/在查找用户的同时,得到用户序号 iif(!strcm p( useri.get_ name( ),n)&&useri.get_status()break;/找到,跳出if(i=5)cout<<"出错啦,此用户不存在!"<<endl;return 0;cout<<"确认删除此用户?确认Y,取消任意键&q

33、uot;<<endl;cin>>c;if(c!='Y'&&c!='y')cout<<"已经取消删除!"<<endl;return 0;this->dele_user(i);cout<<"用户删除成功"<<endl;return 1;Cuse:Cuse()/构造函数,初始化成员status=O;/len gth=O;no w=0;Fhead=O;Dhead=O;Cuse:Cuse()/用户权利,即是否被创建标记 空间当前目录文件目录

34、析构,清除程序占用的内存disk_e mp ty+=le ngth;len gth=0;UFD *f=Fhead;DIR *d=Dhead;/文件/目录int Cuse: new_file() /建立新文件while(f!=0)if(f->n ext=0) this->dele_file(f); f=0;break;while(f- >n ext- >n ext!=O)f=f->n ext;this->dele_file(f- >n ext); f->n ext=0;f=Fhead;while(d!=0)if(d- >n ext=0)thi

35、s->dele_dir(d);d=0;break;while(d->n ext->n ext!=0) d=d->n ext;this->dele_dir(d->n ext);d->n ext=0;d=Dhead;int i=0,j=0;UFD *f,*p=0;DIR *D;p=new UFD;/开辟一个新的文件结构体if(p=0)cout<<"无可用内存空间,创建文件失败!"<<endl;return 1;cout<<"请输入建立的文件名:cin>>p->n ame;

36、if(no w=0) f=Fhead;elsef=no w->File_head;H./根目录下的文件链当前目录下的文件链检查是否文件重名while(f!=0)if(!strcm p(p->n ame,f- >n ame)cout<<"此文件已存在!"<<endl;/退出return 0;f=f->n ext;cout<<"rr<<"cin>>p->le ngth; cout<<"rr<<"长度:"属性(0 :只

37、读,cin>>p->attnbute;cout<<e ndl;if(p->le ngth>disk_e mp ty)cout<<"文件太大,空间不足,1读写):"/空间不足当前空间为:"<<disk_e mp ty<<e ndl;delete p;return 0;disk_e mp ty=disk_e mpty-p->le ngth;/for(i=0;i< p->le ngth&&i<10;i+)for(j;j<10000;j+)if(di

38、sk_blockj=0)p->ai=j;disk_blockj=1;j+;break;/空闲剩余空闲盘块文件较小时,直接地址,文件数据盘块位示图法得到此空间标记为已分配出去跳出寻找,为文件分配下一空间p-> p1=0;p-> p2=0;if(p->le ngth>10)p-> p1=new in t100;/for(i=10;i< p->le ngth&&i <110;i+) for(j;j<10000;j+) if(disk_blockj=0) (p-> p1)i-10=j; disk_blockj=1; j+

39、;break;if(p->le ngth>110)一级索引二级索引超过10,用一级索引为一级索引分配 100个空间/j,继续前面的值p-> p2=new in t100100;for(i=110;i< p->le ngth;i+) for(j;j<10000;j+) if(disk_blockj=0) /超过110,得用二级索引int m=(i-110)/100; int k=(i-110)%100;p-> p2mk=j; disk_blockj=1; j+;break;/在一级索引的基础上,2/j,继续前面的值/行/列if(no w=0)p->

40、next=Fhead;/后继结点指向头,即新指点在前Fhead=p; /新结点在头else/根目录下的文件p->n ext=no w->File_head;no w->File_head=p;21/用户总空间大小增加/子目录下空间大小增加while(D!=0) int Cuse: new_dir()/建立新目录len gth+=p->le ngth;if(no w!=0)no w->le ngth+=p->le ngth;D=now->above;/ 上一级目录/上级目录(根目录已实现)空间增加D->le ngth+=p->le ngth;

41、D=D->above; / 逐级向上27DIR *p,*h; cout<<"请输入新目录的名字:"<<endl;p=new DIR;cin>>p->n ame;p->Dir_head=0;p->le ngth=0;p-> File_head=0;if(no w=0)/目录名目录下的目录链为空目录下的文件为空 当前为主目录h=Dhead; /第一次时,h=0;指向目录链elseh=no w->Dir_head;/ 当前的目录链 while(h!=0) /此目录下存在其它子目录 if(!strcm p(h-

42、>n ame ,p->n ame)cout<<"此目录已存在!"<<endl;return 0;h=h->n ext;if(no w=0)p->above=O; p->n ext=Dhead; Dhead=p;/当前为主目录/主目录里目录的上一结点为0/把原目录接入新目录后面( Dhead初始为0)/Dhead始终指向最新目录结点 else/当前目录为新目录的上一结点/反序插入新目录p->above=now;p->n ext=no w->Dir_head;now->Dir_head=p;/ 更新目

43、录链cout<<"目录创建成功"<<endl;return 1;int Cuse:goback()/向上返回if(no w=0)cout<<"已是主目录,不能向上!"<<endl;return 0;now=no w->above;/上一结点return 1;int Cuse:o pen _dir()/打开目录char n ame10;DIR *p;if(now=0)/当前主目录p=Dhead;elsep=now->Dir_head;/p 指向目录链cout<<"请输入你要打

44、开的目录名:”<<endl;cin>>n ame;/int flag=0;while( p!=0)if(strcm p(p->n ame ,n ame)=O)now=p; /找至U目录,now标记return 1;p=p->n ext;cout<<"当前没此目录"<<endl;删除文件的前面工作return 0;int Cuse:first_dele_file() /char temp 10,a5;cout<<"你要删除的文件名:"<<endl;cin> >t

45、e mp;UFD *f=Fhead; /数据文件头指针UFD *above=0;if(no w!=0)f=now->File_head;/当前目录下的数据文件while(f!=0)if(!strc mp(f->n ame,tem p)break; /找到,跳出above=f; /标记第一个文件f=f->n ext;if(f=0)cout<<"此文件不存在"<<endl;return 0;cout<<"确定删除"<<f->name<<"文件吗?按 0确定,其他键取

46、消"<<endl;cin> >a;if(a0!='0')cout<<"已取消删除文件。"<<endl;return 0;disk_empty+=f->length;/回收此数据文件的空间大小if(now=0)/ 根目录if(f=Fhead)Fhead=Fhead->n ext;elseabove->n ext=f- >n ext; elseDIR *d=now;while(d!=0)d->le ngth=f->le ngth;d=d->above;if(f=n

47、o w->File_head)no w->File_head=no w->File_head->n ext;elseabove->n ext=f- >n ext;len gth-=f->le ngth; this->dele_file(f);cout<<"删除成功"<<endl; return 1;int Cuse:dele_file(UFD *f) /具体实现删除文件int i=0,m;for(i=0;i<10&&i<f->le ngth;i+)m=f->ai;

48、disk_blockm=0;if(f-> p1!=0)for(i=10;i<110&&i <f->le ngth;i+)m=f-> p1i-10; disk_blockm=0;delete(f-> p1);if(f-> p2!=0)for(i=110;i<f->le ngth;i+)m=(f-> p2)(i-110)/100(i-110)%100; disk_blockm=0;delete(f-> p2);/回收一级索引/回收二级索引/回收文件具体空间,重置空闲delete f;f=0;/要删除的文件为空了ret

49、urn 1;int Cuse:first_dele_dir()/删除目录的前奏char n10;char c;DIR *p ,*above=0;p=Dhead; /指向根目录下的目录链if(no w!=0)p=now->Dir_head;/指向当前目录下的目录链cout<<"要删除的目录名:"<<endl;cin>>n;while (p !=0)if(!strc mp(p-> name, n)break; /找到要删除的目录,跳出above=p; /保存前一结点p=p->n ext;if(p=0)cout<<

50、"没有这个目录!"<<endl;return 0;cout<<"确定删除当前目录及此目标上的所有信息吗?按0确定,其他键取消"<<e ndl;cin> >c; if(c!='0') return 0;disk_empty+=p->length;/ 回收磁盘空间if(no w=0)if(p=Dhead)/如果是根目录下头结点,直接移动Dhead=Dhead->n ext;elseDheadabove-> next=p-> next;/中间抽掉目标else29if(p=n

51、o w->Dir_head)no w->Dir_head=no w->Dir_head->n ext; elseabove->n ext=p->n ext; above=now; / 当前目录while(above!=0)above->length-=p->length;/用above标记当前目录,进行大小更新above=above->above; / 向上一级/根目录大小更新len gth-=p->le ngth;this->dele_dir( p);p=0;"<<e ndl;cout<<&q

52、uot;删除成功!return 1;int Cuse:dele_dir(DIR *p)/具体实现删除目录的工作31int flag=O;DIR *d=p->Dir_head;UFD *f=p->File_head; if(f!=0)/当前目录下的目录链表/当前目录下的文件链while( p-> File_head->n ext!=0)/删除目录里的文件f=p-> File_head;while(f- >n ext->n ext!=0) f=f->n ext;this->dele_file(f- >n ext); f->n ext

53、=0;if(p-> File_head->n ext=0)this->dele_file( p->File_head);/删除头文件p-> File_head=0; if(d!=0)/删除目录下的目录while( p->Dir_head->n ext!=0) d=p->Dir_head;while(d->n ext- >n ext!=0)d=d->n ext;this->dele_dir(d->n ext);d->n ext=0;if(p->Dir_head->n ext=0)this->dele_dir( p->Dir_head);/ p->Dir_head=0;delete p;p=0;return 1;删除目录链头结点/释放p占用的内存置0显示当前目录int Cuse:dis_ no w() /DIR *d=Dhead;UFD *f=Fhead;if(no w!=0)d=now->Dir_head;/当前目录下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论