多用户多目录文件系统(实验报告、完整源代码版)

合集下载

文件管理系统实验报告

文件管理系统实验报告

一、实验目的本次实验旨在通过设计和实现一个简单的文件管理系统,加深对文件管理原理的理解,掌握文件系统的基本操作,包括文件的创建、删除、修改、查询等,并了解文件系统的目录结构和管理机制。

二、实验环境1. 操作系统:Windows 102. 开发工具:Visual Studio 20193. 编程语言:C++4. 实验时间:2023年10月25日三、实验内容1. 文件系统的目录结构设计2. 文件的基本操作实现3. 文件系统的存储管理4. 文件系统的安全机制四、实验步骤1. 目录结构设计根据文件系统的需求,设计以下目录结构:```根目录│├── 文件夹A│ ├── 文件1.txt│ └── 文件2.txt│├── 文件夹B│ └── 文件3.txt│└── 文件夹C```2. 文件的基本操作实现(1)文件创建```cppvoid CreateFile(const std::string& filePath, const std::string& content) {// 检查文件是否存在if (CheckFileExist(filePath)) {std::cout << "文件已存在!" << std::endl;return;}// 创建文件std::ofstream file(filePath);if (file.is_open()) {file << content;file.close();std::cout << "文件创建成功!" << std::endl;} else {std::cout << "文件创建失败!" << std::endl;}}```(2)文件删除```cppvoid DeleteFile(const std::string& filePath) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl;return;}// 删除文件if (remove(filePath) == 0) {std::cout << "文件删除成功!" << std::endl;} else {std::cout << "文件删除失败!" << std::endl;}}```(3)文件修改```cppvoid ModifyFile(const std::string& filePath, const std::string& newContent) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl; return;}// 修改文件内容std::ofstream file(filePath, std::ios::trunc); if (file.is_open()) {file << newContent;file.close();std::cout << "文件修改成功!" << std::endl; } else {std::cout << "文件修改失败!" << std::endl; }}```(4)文件查询```cppvoid QueryFile(const std::string& filePath) {// 检查文件是否存在if (!CheckFileExist(filePath)) {std::cout << "文件不存在!" << std::endl; return;}// 读取文件内容std::ifstream file(filePath);if (file.is_open()) {std::string content((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());std::cout << "文件内容:" << content << std::endl;file.close();} else {std::cout << "文件读取失败!" << std::endl;}}```3. 文件系统的存储管理文件系统采用磁盘文件作为存储介质,通过文件操作实现对文件的读写。

文件系统课程设计源代码

文件系统课程设计源代码

文件系统课程设计源代码一、教学目标本课程的教学目标是使学生掌握文件系统的基本概念、原理和操作方法。

具体包括:1.知识目标:学生能够理解文件系统的定义、作用和基本组成;掌握文件、目录和磁盘空间的管理方法;了解文件系统的性能优化和安全性措施。

2.技能目标:学生能够熟练使用文件系统进行文件操作,如创建、删除、移动和权限设置;能够运用文件系统进行数据管理和备份;能够分析和解决文件系统在使用过程中遇到的问题。

3.情感态度价值观目标:培养学生对文件系统的安全意识,使其能够正确处理文件隐私和数据安全问题;培养学生珍惜资源、节约空间的意识,提高其信息技术素养。

二、教学内容教学内容主要包括以下几个部分:1.文件系统概述:介绍文件系统的基本概念、作用和组成,使学生了解文件系统在操作系统中的重要性。

2.文件和目录管理:讲解文件和目录的定义、操作方法和形式,培养学生熟练使用文件系统进行文件管理的能力。

3.磁盘空间管理:介绍磁盘空间分配策略、回收方法和优化手段,使学生掌握磁盘空间的有效利用技巧。

4.文件系统性能优化:讲解文件系统的性能指标、优化策略和调整方法,培养学生提高文件系统性能的能力。

5.文件系统安全性:介绍文件系统的安全特性、权限管理和加密方法,使学生具备较强的文件安全意识。

6.实践操作:通过实际操作演练,使学生熟练掌握文件系统的使用方法,提高实际应用能力。

三、教学方法本课程采用多种教学方法相结合的方式,以激发学生的学习兴趣和主动性:1.讲授法:教师讲解文件系统的基本概念、原理和操作方法,使学生掌握文件系统的理论知识。

2.案例分析法:分析实际案例,使学生了解文件系统在实际应用中的问题和解决方法。

3.实验法:安排上机实验,让学生亲自动手操作,提高实际应用能力。

4.讨论法:学生进行小组讨论,分享学习心得和经验,培养学生的合作精神。

四、教学资源本课程所需教学资源包括:1.教材:选用权威、实用的教材,为学生提供系统的理论知识。

模拟文件系统(多级,含源代码)

模拟文件系统(多级,含源代码)

内含源代码,不懂可以百度消息给我多级文件目录管理实训报告--FileManager院别:计算机学院姓名:LDY学号:20110040xxxxxx班级:计Y11x广西科技大学大学计算机学院Creation time:2013-1-8 17:44:25目录1实验目的 (2)2实验内容 (2)2.1实验题目:树状多级文件目录管理系统 (2)2.2实验要求:功能实现 (2)3设计分析 (3)3.1数据结构分析:树形目录的存储、删除及树的显示 (3)3.2 数据结构定义 (7)3.3 功能分析和函数定义 (10)4 功能总览 (15)4.1 功能总览 (15)4.2主要功能 (15)5 实训总结 (19)5.1 所遇困难 (19)5.2 心得体会 (20)1实验目的本次实训的总体目的在于通过系统的编程训练,培养学生编写一个具有一定难度的小型系统的能力,培养学生从编写单个程序,实现单个程序功能到进行系统开发,整体调试的能力。

从知识点的角度来说,目的在于通过本实训项目,让学生对链表或二叉树这一重要数据结构的运用更加熟练。

2实验内容2.1实验题目:树状多级文件目录管理系统本次实训的题目是树状多级文件目录管理系统。

要求利用数据结构的知识,采用链表的形式或通过将树转换为二叉树的概念,采用孩子兄弟二叉树的方式实现文件目录系统。

不容许采用数据库实现文件管理。

每个树结点表示一个文件(包括目录文件),成员基本信息可包含,文件名、文件属性、文件大小、文件创建时间,文件最后修改时间、文件最后访问时间等信息。

具体属性自行确定(注意:成员基本信息尽量与Window系统中文件具有的属性信息相同,以便对文件进行磁盘存取时保证文件的属性信息不丢失)。

2.2实验要求:功能实现要求实现的总体基本功能包括:文件的创建和删除;文件夹的创建和删除;文件的读写和执行;文件的层次化显示;打开和关闭文件;显示目录下的文件;查找给定文件和目录;根据给定属性对文件进行排序;选做功能包括:将内存中的多级文件系统存储到磁盘中,将磁盘中某目录下的文件系统读入系统并回购多级目录系统。

文件管理实验报告

文件管理实验报告

文件管理一、实验目的:1.了解os中文件的组织和管理。

2.熟悉文件中所用的数据结构。

二、实验要求:1. 设计一个N个用户的文件系统,每个用户最多保存m个文件。

2. 限制用户在一次使用中只能打开L个文件。

3. 系统应能检查输入命令的正确性,出错能显示出原因。

4. 对文件必须设置保护措施,如只读、写、执行等。

在每次打开时再次设置保护级别,即可有二级保护。

5. 对文件的操作至少有以下几条命令create:建文件delete:删文件open:打开文件close:关闭文件read:读文件write:写文件举例:主文件目录mfd=recordusername :string[maxlen];files :array[1..L] of ufd;ofiles :arrau[1..S] of uodend;用户打开文件目录表:uod=recordfilename:string[maxlen];attrib:attrib;len:integer;status:(open,create);rp,up:integer;end;用户文件目录:ufd=recordfielname:string[maxlen];attrib ro,rw);len:integer;addr:integer;end;二、主要数据结构界面采用VC6 MFC环境开发#define MAXFILE 20 //每个用户最多保存20个文件#define MAXUSER 10 //假想文件系统最多支持的人数#define BLOCKSIZE 32 //虚拟磁盘中物理块为每块32字节#define DISKSIZE BLOCKSIZE*1000 //虚拟磁盘容量为1000*32=32Kstruct UFD //说明文件项的结构数组{char FileName[15];char Time[16]; //文件建立或修改时间如2003/5/6 12:00bool IsExist; //文件是否存在,删除时标为0bool IsShared; //共享标记,共享文件可被其它用户所访问bool AttrRead; //文件是否可读bool AttrWrite; //文件是否可写bool AttrExecute; //文件是否可执行HTREEITEM treeNode; //用于树控件显示的结点句柄USHORT FileLen; //文件占用字节数USHORT BlockNum; //文件占用的物理块数USHORT FileLink[100];//文件物理块地址数组,每块32字节,限定一个文件最大100*32=3200字};struct MFD{char UserName[10]; //主目录用户名bool IsExist; //该用户否存在UFD ufd[MAXFILE]; //用户文件数组USHORT nItem;//UFD个数};struct HEADBLOCK{BYTE pStack; //堆栈指针SHORT pBlock[10]; //块号 pBlock[10]是下一个盘块号逻辑地址};struct BLOCK //虚拟磁盘的物理块数据结构{union{BYTE block[32]; //一块为32字节HEADBLOCK HeadInfo;};};struct FAT{BLOCK SuperBlock; //超级块,指示第一个空闲块逻辑号USHORT MaxOpen; //该用户同时可打开的最大文件数USHORT UserNum; //最户数MFD Mfd[MAXUSER]; //最多可支持10个用户};//空闲块成组链接法bool OpenList[MAXUSER][MAXFILE]; //描述文件是否打开的布尔型数组FAT FileFAT; //描述文件记录项的FAT结构CFile FATIO; //负责和VDISK.DAT打交道的文件句柄CString CurrentUser; //当前登录的用户名Int CurrentID; //前前登录的用户标识号说明:本实验采用模拟文件结构的方法,把记录用户帐号,用户文件和磁盘块的信息用当前目录下的VDISK.DAT来记录,可以把VDISK.DAT看成是一个虚拟的磁盘,其头部是FAT结构,用来记录各个用户和文件信息,紧接着是空闲块成组链接法的数据结构,每块32字节,每组10块,共1000块,也就是说,用户文件数据的总容量是32*1000字节,如果程序当前目录下找不到用于做实验用的VDISK.DAT,在登录时程序会提示是否“格式化虚拟磁盘”也就是新建一个VDISK.DAT文件,接着,程序会显示“用户管理”的窗口,此时应新建几个帐号用于登录做实验。

操作系统文件系统实验报告后附源代码

操作系统文件系统实验报告后附源代码

目录1 课程设计简介 (1)1.1 课程设计的目的 (1)1.2 课程设计内容 (1)2 数据结构的设计 (2)2.1 预定义 (2)2.2 结构体 (2)2.3 全局变量和函数 (2)3 功能模块(或算法)描述 (5)3.1 模块划分 (4)3.2 模块流程图 (6)4 程序运行结果 (8)5心得体会 (9)参考文献 (10)附源代码 (11)1 课程设计简介1.1 课程设计的目的课程设计目的使学生熟悉文件管理系统的设计方法;加深对所学各种文件操作的了解及其操作方法的特点。

通过模拟文件系统的实现,深入理解操作系统中文件系统的理论知识, 加深对教材中的重要算法的理解。

同时通过编程实现这些算法,更好地掌握操作系统的原理及实现方法,提高综合运用各专业课知识的能力。

1.2 课程设计内容课程设计内容设计一个简单的多用户文件系统。

即①在系统中用一个文件来模拟一个磁盘;②此系统至少有:Create、delete、open、close、read、write等和部分文件属性的功能。

③实现这个文件系统。

④能实际演示这个文件系统。

基本上是进入一个界面(此界面就是该文件系统的界面)后,可以实现设计的操作要求。

1)设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。

2)程序采用二级文件目录(即设置主目录MFD)和用户文件目录(UFD)。

另外,为打开文件设置了运行文件目录(AFD)。

3)为了便于实现,对文件的读写作了简化,在执行读写命令时,只需改读写指针,并不进行实际的读写操作。

4)因系统小,文件目录的检索使用了简单的线性搜索。

5)文件保护简单使用了三位保护码:允许读写执行、对应位为1,对应位为0,则表示不允许读写、执行。

6)程序中使用的主要设计结构如下:主文件目录和用户文件目录(MFD、UFD),打开文件目录(AFD)即运行文件目录,如图5.1所示。

2 数据结构的设计2.1 预定义#define BLOCKSIZ 512 //磁盘块的大小#define DA TABLKNUM 512 //数据块的数目#define BLKGRUPNUM 50 //数据块组包含多少数据块#define P_N_BLOCKS 15 //inode节点中指向数据块的指针个数#define GROUPNUM DATABLKNUM/BLKGRUPNUM+1 //数据块组组数#define DINODESIZ 512 //磁盘i结点区的大小(空间32×512)#define DINODENUM 32 //磁盘i结点区的块数#define SYSOPENFILE 40#define DIRNUM 32 //一个目录下的最多目录和文件的总和数#define DIRSIZ 14 //文件、目录名的长度(字节)#define UPWDSIZ 15 //密码的长度#define UNAMSIZ 15 //用户名的长度#define PWDSIZ sizeof(struct pwd) //密码结构的长度#define PWDNUM BLOCKSIZ/PWDSIZ //密码数据空间的大小(pwd为单位)#define NOFILE 20 //一个用户最多可以打开的文件数目#define DINODESTART 4*BLOCKSIZ//i结点区的开始地址-inodes table ,1引导2超块3block bitmap 4inode bitmap#define DA TASTART (2+DINODENUM)*BLOCKSIZ //数据区的开始地址#define DATASTARTNO 36 //数据区开始指针#define DIMODE_EMPTY 00000/*可以用的空间*/#define DIMODE_FILE 00001#define DIMODE_DIR 00002#define DIMODE_PASSWD 00004#define GRUP_0 0 //管理员组#define GRUP_1 1#define GRUP_2 2#define GRUP_4 42.2 结构体//磁盘i结点结构,struct inode{// char di_name[DIRSIZ];unsigned __int16 di_ino; /*磁盘i节点标识*/unsigned __int16 di_number; /*关联文件数,当为0时表示删除文件*/unsigned __int16 di_mode; /*存取权限*/unsigned __int16 di_uid; /*磁盘i节点用户id*/unsigned __int16 di_gid; /*磁盘i节点权限组id*/ //1管理员组2用户组unsigned __int32 di_size; /*文件大小*/unsigned __int32 di_ctime; /* Creation time */unsigned __int32 di_mtime; /* Modification time */unsigned __int16 di_block[P_N_BLOCKS]; /* 一组block 指针*/};// 目录项结构struct direct{char d_name[DIRSIZ]; /*目录名(14字节)*/__int16 d_ino; /*目录号*/};//超级快结构struct super_block{unsigned __int16 s_inodes_count; /* inodes 计数*/unsigned __int16 s_blocks_count; /* blocks 计数*/unsigned __int16 s_r_blocks_count; /* 保留的blocks 计数*/unsigned __int16 s_free_blocks_count; // 空闲的blocks 计数unsigned __int16 s_free_inodes_count; /* 空闲的inodes 计数*/unsigned __int16 s_free_blocks_group[GROUPNUM];//新增一个数组来记录每个数据块组中的空闲数据块计数unsigned __int16 s_first_data_block; /* 第一个数据block */unsigned __int16 s_log_block_size; /* block 的大小*/unsigned __int16 s_blocks_per_group; /* 每block group 的block 数量*/unsigned __int16 s_inodes_per_group; /* 每block group 的inode 数量*/};// 用户密码struct pwd{unsigned __int8 p_uid;unsigned __int8 p_gid;char username[UNAMSIZ];/*用户名新加的*/char password[UPWDSIZ];};// 目录结构struct dir{struct direct direct[DIRNUM];__int16 size;};2.3 全局变量和函数// 全局变量unsigned __int8 di_bitmap[DINODENUM]; // 硬盘inode节点位图1表示已使用0表示未使用unsigned __int8 bk_bitmap[DA TABLKNUM]; // 数据块block位图struct super_block filsys; //超级块struct pwd pwd[PWDNUM];FILE *fd; //文件指针struct inode *cur_inode; //i节点当前目录指针struct inode *inodetemp; //i节点指针const char fsystemname[20]="Linux.EXT2"; //模拟硬盘的文件名struct direct dir_buf[BLOCKSIZ / sizeof(struct direct)]; //目录数组char cmdhead[20];//cmd 的头表示所在哪个文件夹、int i_lock=0;//inode位图锁可能会多线程int b_lock=0;//block位图锁struct pwd *cur_user;/* 全局函数*/extern int Format();//格式化磁盘extern int Install();//启动,安装文件系统struct inode * read_inode(int);//install里面读取文件dinodestruct direct * read_dir_data(int);//读取存储文件夹的物理块extern void showdir();//命令dirint Enterdir(char[]);//进入某个文件夹命令-- cd 文件名int Fd_dirfile(char[]);//查找当前目录里的文件没找到返回-1 找到返回inode号int Iscmd(char[]);//判断是否两个字符串的命令void two_cmd(char[],char[]);//两个字符串的命令int creat(char[]);//创建文件void changeinode();//交换指针char * ReadFile(char[]);//读取文件int mkdir(char[]);//创建文件夹void showbitmap();//显示位图int deletefd(char[]);//删除文件int editfile(char[]);//编辑文件int rename(char[]);//重命名void showhelp();//命令帮助void login();void logout();int access();//权限判断/*磁盘i节点的分配与释放(当一个新文件被建立的时候,在给该文件分配磁盘存储区之前,应为该文件分配存放该文件说明信息的磁盘i节点,当从文件系统中删除某个文件时,应首先删除它的磁盘i节点项。

操作系统 文件系统的多级目录管理实验

操作系统 文件系统的多级目录管理实验

实验五文件系统的多级目录管理(4课时)一、实验目的通过实验了解文件系统管理的基本原理和方法。

掌握在在文件系统中进行多级目录的管理。

了解文件和目录的基本操作。

二、实验内容在系统中进行目录的建立、改变当前目录、对目录进行删除;建立一个文件,显示文件内容,删除文件等。

三、实验提示1、目录的存储结构的设置。

2、文件的建立方式,文件内容的管理。

3、如何进行文件的按名管理,文件在内存中的如何存储。

4、必要的提示信息。

程序://本程序模拟文件系统的多级目录管理,实现按名存取//#include<iostream.h>#include<iomanip.h>#include<stdlib.h>#include<stdio.h>#include<string.h>//文件类class file{private:int size;char filename[9];char *text;public:file *next;file();voideditfile();char *getfilename() {return filename;} //返回文件名void show_text() {cout<<endl;cout<<text;cout<<endl;} //显示文本内容intgetsize() { return size;}~file() {delete text;};};//目录类class directory{private:chardirname[9];public:file *pfile;directory *nextdir,*subdir,*fatherdir;directory(char *dname) { strcpy(dirname,dname);pfile=NULL;} directory() { pfile=NULL;cin>>dirname; }void creatfile(); //新建文件void deletefile(); //删除文件void showfile(); //显示文件char *getdname() {return dirname;} //返回目录名~directory() {delete pfile;};};//文件目录管理类classdirmanager{public:void manager(); //文件和目录管理的主控函数void addnew(); //新增目录void cdsubdir(); //进入子目录void showdir(); //提示当前所在目录路径void showdirinfor(); //显示当前目录所包含子目录和文件信息~dirmanager() {delete root;}private:directory *root,*p,*p1,*p2;directory *dir[10]; //存放目录指针};//文件类构造函数,询问是否编辑文件file::file(){char edit;cin>>filename;cout<<"是否编辑文件?(y/n):";cin>>edit;if(edit=='y'||edit=='Y')editfile();else size=0;}//编辑文件函数的实现void file::editfile(){text=new char[1024];cout<<"请输入文件内容:"<<endl;gets(text);size=strlen(text);}//新建文件函数的实现void directory::creatfile(){file *pf,*p1;if(pfile==NULL) {pf=new file; pfile=pf;pf->next=NULL;}else { p1=pfile;while(p1->next!=NULL) p1=p1->next;pf=new file;p1->next=pf; pf->next=NULL;}}//处理目录下是否有文件显示命令void directory::showfile(){char name[9],ch1;intfindfile=-1;file *pt;if(pfile!=NULL){ pt=pfile;cin>>name;while(pt!=NULL){ findfile=strcmp(name,pt->getfilename());if(findfile==0){ if(pt->getsize()!=0) pt->show_text();else {cout<<"文件中无内容!"<<endl;cout<<"是否编辑该文件(y/n):";cin>>ch1;if(ch1=='y'||ch1=='Y') pt->editfile();}break;}pt=pt->next;}if(findfile!=0) cout<<"文件名错误,无此文件!"<<endl;}else cout<<"当前目录无文件!"<<endl;}//删除文件函数的实现void directory::deletefile(){char filename[9],choice;file *p1,*p2;intfindfile=-1;if(pfile!=NULL){ p1=pfile;cin>>filename;while(p1!=NULL){findfile=strcmp(filename,p1->getfilename());if(findfile==0){ cout<<"真的要删除文件吗?(y/n):";cin>>choice;if(choice=='y'||choice=='Y') {if(p1==pfile) pfile=p1->next; else p2->next=p1->next;/*delete p1;*/break;} }p2=p1;p1=p1->next;}if(findfile!=0) cout<<"文件名错误!"<<endl;}else cout<<"当前目录下无文件!"<<endl;}//新建目录函数的实现voiddirmanager::addnew(){p1=new directory;p1->fatherdir=p;p1->subdir=NULL;p1->nextdir=NULL;if(p->subdir==NULL) p->subdir=p1;else {p2=p->subdir;while(p2->nextdir!=NULL) p2=p2->nextdir;p2->nextdir=p1;}}//进入子目录函数的实现voiddirmanager::cdsubdir(){chardname[9];int find;directory *p3=p;//cout<<"请输入你要进入的目录名:";cin>>dname;if(p->subdir!=NULL){ p3=p3->subdir;while(p3!=NULL) {find=strcmp(dname,p3->getdname());if(find==0) {p=p3;break;}p3=p3->nextdir;}if(find!=0) cout<<"目录名错误!"<<endl;}else cout<<"当前目录为空目录!"<<endl;}//显示所在目录路径函数的实现voiddirmanager::showdir(){ int i=0,j;directory *pd;dir[i++]=p; pd=p->fatherdir;while(pd!=NULL){ dir[i]=pd;pd=pd->fatherdir;i++;}for(j=i-1;j>=0;j--){cout<<dir[j]->getdname();if(j!=0||i==1)cout<<"\\";}cout<<">";}//显示当前目录的文件和目录信息函数的实现voiddirmanager::showdirinfor(){int length;file *pfi;directory *pdi;if(p->pfile!=NULL){ pfi=p->pfile;while(pfi!=NULL){ length=strlen(pfi->getfilename());cout<<pfi->getfilename()<<setw(30-length)<<"<文件>"<<endl;pfi=pfi->next;}}if(p->subdir!=NULL){pdi=p->subdir;while(pdi!=NULL){ length=strlen(pdi->getdname());cout<<pdi->getdname()<<setw(30-length)<<"<目录>"<<endl;pdi=pdi->nextdir;}}if(p->pfile==NULL&&p->subdir==NULL)cout<<"空目录!"<<endl;}//文件和目录管理的主控函数的实现voiddirmanager::manager(){charch;int i;cout<<"新建、进入命令其后都必须加上文件或目录名,显示文件内容也必须加上文件名"<<endl;cout<<"<1>新建目录<2>返回上级目录<3>进入子目录"<<endl;cout<<"<4>新建文件<5>删除文件<6>显示文件内容"<<endl;cout<<"<7>显示当前目录信息<8>退出"<<endl;root=new directory("c:"); root->fatherdir=NULL;root->subdir=NULL;root->nextdir=NULL;p=root;for(i=0;i<200;i++){ cout<<"\n";showdir();cin>>ch;switch(ch){case '1': addnew();break;case '2': {if(p->fatherdir!=NULL) p=p->fatherdir;break;}case '3': cdsubdir();break; //进入子目录case '4': p->creatfile();break;//新建文件case '5' :p->deletefile();break; //删除目录下的文件case '6': p->showfile();break; //显示文件内容case '7': showdirinfor();break; //显示目录信息case '8': exit(1);default: cout<<"无效命令"<<endl;break;}}}void main(){dirmanager admin;admin.manager();}。

(完整word版)多用户多级目录文件系统(第二组)

(完整word版)多用户多级目录文件系统(第二组)

滁州学院课程设计报告课程名称:计算机操作系统设计题目:多用户多级目录文件系统系别:计算机科学与技术系专业:计算机科学与技术专业组别:第二组起止日期: 2010年6月26日~ 2010年6月27日****:***教研室主任:杨传健计算机科学与技术系2010年制课程设计任务书目录1.设计思想说明 (1)2.系统结构说明 (1)3.数据结构说明 (1)3.1开发环境 (1)3.2数据存储 (2)3.3数据结构 (2)3.3.1数据块在内存中的物理结构 (2)3.3.2文件索引结构 (2)3.3.3文件系统中文件元素的结构(含文件夹和文件) (2)3.3.4文件系统结构 (3)3.3.5文件系统的当前运行状态 (3)3.3.6用户结构 (4)4.各主要模块的算法流程图 (4)4.1整体思路概述 (4)4.1.1login (用户登录) (4)4.1.2系统初始化 (5)4.1.3文件的创建:create (5)4.1.4文件的打开:open (6)4.1.5文件的读:read (6)4.1.6文件的写:write (8)4.1.7文件关闭:close (9)4.1.8删除文件:delete (10)4.1.9创建目录(建立子目录):mkdir (12)4.1.10改变当前目录:cd (12)4.1.11列出文件目录:dir (14)4.1.12退出:logout (15)4.2算法流程图 (16)5.使用说明书 (17)5.1登录 (17)5.2新建目录和列出文件目录 (17)5.3改变当前目录 (17)5.4文件的创建 (18)5.5文件的打开 (18)5.6文件的写 (18)5.7文件的读 (18)5.8文件的关闭 (18)5.9文件的删除 (19)5.10返回根目录 (19)5.11退出 (19)6.心得体会 (19)参考文献 (19)1.设计思想说明本课程设计要求设计一个模拟的多用户多级目录的文件系统。

(完整word版)一个多用户多级目录结构文件系统设计与实

(完整word版)一个多用户多级目录结构文件系统设计与实

操作系统课程设计姓名:学号:班级:电话:邮箱:课程设计题目:一个多用户多级目录结构文件系统设计与实现编译环境: Linux运行环境: Linux一、设计思想说明1 设计环境课程设计的环境是Linux 操作系统。

设计时可利用Linux 提供的文件管理的功能调用,建立一个模拟的文件系统。

基本思想是,在Linux 系统中创建一个较大容量的文件,作为所设计的文件系统的“文件卷”,并利用Linux 系统的功能调用,编写各程序模块。

2、文件卷的组织以 1M 的存储器空间作为文件空间,空间“分块”,编号为 0#~(BLKMAX-1)# 。

“分块”就是规定对文件卷的读/写以块为单位,每次读/写的起点为块大小的整倍数。

分块主要体现在文件卷的读/写模块上。

# define BSIZE 512 /* 512bytes/块 */# define BLKMAX 2048 /* 共2048 块 */0#块的作用: 0# 块是专用块(超级块)。

前半部用于存放文件卷空间的位示图(bitmap),位状态='0'表示对应块空闲,状态='1'表示已分配。

后半部的最后32 个字节用于存放根目录的目录结构。

0#块不参与文件空间的动态分配。

1#~(BLKMAX-1)#块用于存放文件(普通文件和子目录文件)的信息。

二、系统结构的说明本文件管理系统分为五层,上层调用下层,下层为上层服务。

以下为各层(由低到高)的简要说明:1、块管理层,通过TBlock类实现设下列主要函数:balloc()--块分配函数brelse()--块释放函数bread()—读一块函数bwrite()—写一块函数2、FCB管理层,通过TFcb类实现功能涉及到FCB结构的操作,定义了一些与FCB操作相关的函数3、打开文件管理层,通过TOFile类实现功能为涉及ofile结构的操作。

4、命令解释层,通过TEnter类和TOrder类实现功能为接受来自用户的命令,并解释、执行用户提出的文件访问操作。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

广东工业大学课程设计任务书(源代码在附录)题目名称多用户多级目录文件系统的实现学生学院计算机学院专业班级2008级软件工程2班姓名锟学号6900一、课程设计的内容本课程设计要求设计一个模拟的多用户多级目录的文件系统。

通过具体的文件存储空间的管理、文件的物理结构、目录结构和文件操作的实现,加深对文件系统内部功能和实现过程的理解。

二、课程设计的要求与数据1.在内存中开辟一个虚拟磁盘空间作为文件存储器,在其上实现一个多用户多目录的文件系统。

2.文件物理结构可采用显式链接或其他方法。

3.磁盘空闲空间的管理可选择位示图或其他方法。

如果采用位示图来管理文件存储空间,并采用显式链接分配方式,则可以将位示图合并到FAT中。

4.文件目录结构采用多用户多级目录结构,每个目录项包含文件名、物理地址、长度等信息,还可以通过目录项实现对文件的读和写的保护。

目录组织方式可以不使用索引结点的方式,但使用索引结点,则难度系数为1.2。

5.设计一个较实用的用户界面,方便用户使用。

要求提供以下相关文件操作:(1)具有login (用户登录)(2)系统初始化(建文件卷、提供登录模块)(3)文件的创建: create(4)文件的打开:open(5)文件的读:read(6)文件的写:write(7)文件关闭:close(8)删除文件:delete(9)创建目录(建立子目录):mkdir(10)改变当前目录:cd(11)列出文件目录:dir(12)退出:logout6.系统必须可实际演示,选用程序设计语言:C++、C等。

目录一、设计思想说明 (2)1.1设计环境 (2)1.2设计思想 (2)1.3存储空间管理 (2)1.4目录结构 (2)二、数据结构 (3)2.1虚拟磁盘 (3)2.2用户的数据文件 (3)2.3目录文件 (3)2.4管理目录文件的类 (3)2.5管理用户的类 (4)三、功能实现 (4)3.1登陆系统 (4)3.2系统初始化 (4)3.3文件的创建 (5)3.4文件的打开 (5)3.5文件删除 (5)3.6文件的读 (5)3.7创建目录 (5)3.8查看当前目录 (5)3.9删除目录 (5)3.10返回上一级目录 (5)3.11退出 (5)四、操作思想 (5)五、界面演示 (6)5.1登陆界面 (6)5.2管理员登陆成功后的界面 (6)5.3用户登陆成功后的界面 (6)六、系统具体运行演示 (7)6.1文件的创建与查看(读文件) (7)6.2目录的创建与查看 (7)6.3文件系统空间的查看 (7)七、实验体会 (8)八、收集的资料及主要参考文献 (8)一、设计思想说明1.1设计环境a)程序设计语言:C++语言b)计算机及操作系统:PC机,WindowsXPc)开发平台:Microsoft Visual C++ 6.0企业版d)运行平台:PC机,WindowsXP1.2设计思想文件系统是操作系统中负责管理和存取文件信息的机构,它具有“按名存取”的功能。

文件系统主要实现对具体的文件存取空间的管理、文件的物理结构、目录结构管理和文件操作。

本实验中的文件系统是多用户多级目录的文件系统。

实验中定义用户的上限为5个,目录结构采用多级目录结构。

1.3存储空间管理系统中的数据文件,需要为之分配磁盘空间。

采用模拟方法,虚拟磁盘为一个10000大小的一维数组:disk_block[10000],0表示空闲,1表示已分配出去。

使用混合索引分配方式来为存储文件分配所在外存的块号:当文件大小较小时,采用直接地址,索引结点的每项存放文件数据的盘块的盘块号;当文件大小较大时,采用一次间接地址,即一级索引;当文件非常大时,采用多次间接地址,即二级索引。

1.4目录结构目录结构的组织,关系到文件系统的存取速度、安全性、共享性。

为了提高目录的检索速度和文件系统的性能,采用了多目录结构来组织目录,即树形目录结构,主目录称为根目录,数据文件为树叶,其他的目录为树的结点。

如下图所示。

二、数据结构2.1虚拟磁盘,初始化时所有盘块置0for(i=0;i<10000;i++) //初始化所有磁盘块为空闲disk_block[i]=0;disk_empty=10000;2.2用户的数据文件,即树叶typedef struct UFD //存储文件信息{char name[10]; //文件名int attribute; //属性int length; //长度int a[10]; //为文件本身分配10个空间int *p1; //一级索引,100个空间int (*p2)[100]; //二级索引,100*100个空间struct UFD *next; //文件链的下一结点}UFD;2.3目录文件,即树结构中树的结点typedef struct DIR //存储目录信息{DIR* above; //上一结点char name[10]; //目录名int length; //目录的大小DIR *next; //下一结点UFD *File_head; //此目录下的文件指针DIR *Dir_head; //此目录下目录链表指针}DIR;2.4管理目录文件的类,每个用户都是其的对象class Cuse //定义管理用户目录的类{DIR *now; //当前目录UFD *Fhead; //文件的头结点DIR *Dhead; //根目录的目录链头结点char code[10]; //密码char name[10]; //用户名int length; //用户空间大小int status; //是否获得空间public://……//代码省略//……}2.5管理用户的类,管理员是其的对象class Cdisk{ //用户类public:Cuse user[5]; //用户个数最多为5char code[10]; //管理员密码int dis_disk();//显示磁盘的使用情况int first_dele_user();//删除用户的准备工作int dele_user(int);//具体实现删除用户int new_user();//查看当前用户与外存空间使用情况,后创建新用户int set_code(); //设置新密码int login(char); //登陆Cdisk(); //构造函数virtual~Cdisk(); //虚函数,析构};三、功能实现3.1登陆系统系统中设置了管理员和用户两种登陆模式。

管理员的用户名为“管理员”,默认密码为123,可以后期修改密码。

用户初始化时不存在,在登陆时系统发现不存在任何用户则自动要求用户先注册一用户,并在注册成功后为用户登陆。

3.2系统初始化(建文件卷、提供登录模块)for(i=0;i<10000;i++) //初始化所有磁盘块为空闲disk_block[i]=0;disk_empty=10000;int Cdisk::login(char b) //登陆{……}3.3文件的创建:int Cuse::new_file() //建立新文件3.4文件的打开:openint Cuse::open_file() //打开文件3.5文件删除:int Cuse::first_dele_file() //删除文件的前面工作int Cuse::dele_file(UFD *f) //具体实现删除文件3.6文件的读:int Cuse::dis_file()//查看文件3.7创建目录(建立子目录):int Cuse::new_dir() //建立新目录3.8查看当前目录:int Cuse::dis_dir(DIR *d)//显示目录int Cuse::dis_now() //显示当前目录DIR *Cuse::get_now() //得到当前目录路径3.9删除目录:int Cuse::first_dele_dir() //删除目录的前奏int Cuse::dele_dir(DIR *p) //具体实现删除目录的工作3.10返回上一级目录:int Cuse::goback() //向上返回3.11退出:在主菜单中用flag标记实现四、操作思想各个用户的名字不能相同。

在每个用户注册(创建)后,将自动获得一个根目录(root),在此目录中,可以创建多个目录(同一父目录下,不能同名)和多个数据文件。

在root目录里,进入一个新建的子目录,则又可以在此子目录里创建多个目录和数据文件。

依次类推,实现树形结构。

但同一父目录下,目录项和数据文件都不能重名。

五、界面演示5.1登陆界面5.2管理员登陆成功后的界面5.3用户登陆成功后的界面在该界面中,功能选择菜单正面显示了用户名为“user",并同时显示了当前所处的目录为根目录“root”。

此处,如当前处在多级目录里,将把目录路径详细列出,用到的实现函数为er[n].dis_dir(er[n].get_now());如下图所示。

六、系统具体运行演示6.1文件的创建与查看(读文件)6.2目录的创建与查看6.3文件系统空间的查看七、实验体会本次课程设计是利用C++程序语言编写的,由于对C++的自学不够深,导致在调试与编译时出现了很大的困难,但在有关C++实践指导书的帮助下,许多问题都逐步得到了解决。

文件系统的要求的功能很多,程序很长。

但此次实验无疑是对我C++知识的一次磨练,使得我深深体会到它在实现对象操作和相关数据封闭操作的好处。

在设计此系统时,方发觉自己对文件系统理解得不够透彻。

例如在考虑如何实现多用户多目录时,差点就走进了如何在二级目录里实现的死胡同。

后来,耐心回到这学期学习的课本内容上,才醒悟要利用树形结构。

不然,是无法实现多用户情况下的多目录多文件层层嵌套。

如何保证在子目录里进行文件操作(数据文件的创建、删除)时造成的当前目录空间大小变化同步更新到先辈目录的空间大小,这困扰了我很久。

在参考了《操作系统实验教程后》,利用了目录类中的above(指向上一目录结点),当前目录空间变化时,即循环向上同步变化先辈目录的大小,直到根目录为止。

另外,实验中用到了now(目录指针)来指向当前所处的目录。

在同一目录下,如何实现多目录或多数据文件的保存,实验时我先是用数组结构,但后来发觉用指针链表更为方便,因为这样就不必限制数据文件和子目录的个数,虽然指针对内存的申请、释放掌握要求更为严格。

总而言之,操作系统的课程设计,不仅提升了自己的程序设计及编写技巧,更大大地加深了对操作系统的文件管理的了解。

八、收集的资料及主要参考文献[1]计算机操作系统,汤小丹等,西安电子科技大学出版社[2]操作系统实验指导书,傅秀芬,广东工业大学(自编)[3] 操作系统实验教程,袁宝华,清华大学出版社[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_1FAB24AE_C718_49FF_A915_94211192B8BC_INCLUDED_//VC++ 6.0=1200#if _MSC_VER>1000#pragma once#endif //_MSC_VER>1000extern int disk_block[10000];extern int disk_empty;typedef struct UFD //存储文件信息{char name[10]; //文件名int attribute; //属性int length; //长度int a[10]; //为文件本身分配10个空间int *p1; //一级索引,100个空间int (*p2)[100]; //二级索引,100*100个空间struct UFD *next;}UFD;typedef struct DIR //存储目录信息{DIR* above; //上一结点char name[10];int length;DIR *next; //下一结点UFD *File_head; //此目录下的文件指针DIR *Dir_head; //此目录下目录链表指针}DIR;class Cuse //定义管理用户目录的类{DIR *now; //当前目录UFD *Fhead; //文件的头结点DIR *Dhead; //根目录的目录链头结点char code[10]; //密码char name[10]; //用户名int length; //用户空间大小int status; //是否获得空间public:void set_status(int);int dele_user();int dis_file(); //显示文件所占外存块号int dis_dir(DIR *d);//当前路径int get_length();char const *get_name();char const *get_code();int get_status();int set_user(char *,char *);//设置用户名与密码DIR *get_now();int dele_file(UFD *f); //删除文件int dele_dir(DIR*); //删除目录Cuse(); //构造~Cuse(); //析构int goback(); //返回上级int dis_now(); //显示当前目录int new_file();int new_dir();int open_dir();int open_file();int first_dele_file(); //删除文件的前部分工作int first_dele_dir(); //删除目录的前部分工作int set_code();};class Cdisk{ //用户类public:Cuse user[5]; //用户个数最多为5char code[10];int dis_disk();int first_dele_user();int dele_user(int);int new_user(); //查看当前用户与外存空间使用情况,后创建新用户int set_code(); //设置新密码int login(char); //登陆Cdisk();virtual~Cdisk(); //虚函数,析构};#endif //!defined(AFX_DISK_H_1FAB24AE_C718_49FF_A915_94211192B8BC_INCLUDED_) //************************disk.cpp********************************#include"disk.h"#include"menu.cpp"#include<string.h>#include<stdlib.h>#include<iostream.h>#include<iomanip.h>int disk_block[10000];int disk_empty;Cdisk::Cdisk() //管理磁盘的类,构造函数{int i=0;char code[10]="123456";for(i=0;i<10000;i++) //初始化所有磁盘块为空闲disk_block[i]=0;//this->user[0].set_user("student","123");//默认一个用户disk_empty=10000;cout.setf(ios::left); //设置输出方式}Cdisk::~Cdisk() //析构{}int Cdisk::dele_user(int i) //Cdisk类dele_user的构造{Cuse C;C=user[i];user[i].dele_user(); //调用Cuse类的成员函数 int dele_user()return 1;}int Cdisk::dis_disk() //检查磁盘信息{int i=0;cout<<setw(14)<<"用户名"<<setw(14)<<"占用空间大小"<<endl;for(i=0;i<5;i++)if(user[i].get_status()==1) //存在的用户的信息cout<<setw(14)<<user[i].get_name()<<setw(14)<<user[i].get_length()<<en dl;cout<<"已用空间:"<<10000-disk_empty<<endl<<"剩余空间:"<<disk_empty<<endl;return 1;}int Cdisk::login(char b) //登陆{char n[10],c[10];int i;if(b=='1'){cout<<"用户:管理员"<<endl;cout<<"密码:默认\n"<<endl;system("pause");return 1;}else{if(!user[0].get_status()) //当前不存在用户{i=0;cout<<"当前用户为空,欢迎注册!"<<endl;user[i].set_status(1); //为新用户分配权利cout<<"请输入用户名:"<<endl;cin>>n;cout<<"请输入密码:"<<endl;cin>>c;user[i].set_user(n,c); //调用Cuse的成员函数,传递用户名与密码cout<<"恭喜,创建用户成功!"<<endl;return i;}else{cout<<"用户名:";cin>>n;cout<<"密码:";cin>>c;cout<<endl;for(i=0;i<5;i++) //查找是否存在此用户{if(user[i].get_status()) //存在方比较if(!strcmp(n,user[i].get_name())) //相等时为0,此判断为匹配if(!strcmp(c,user[i].get_code())) //密码匹配{cout<<"登陆成功!"<<endl;cout<<"欢迎"<<user[i].get_name()<<"登陆"<<endl;return i;}else{cout<<"密码错误"<<endl;return -1;}}cout<<"此用户不存在!"<<endl;return -1;}}}int Cdisk::set_code() //设置新密码{char temp1[10],temp2[10];cout<<"请输入原密码"<<endl;cin>>temp1;if(strcmp(temp1,code)) //无疑是针对当前用户进行操作,故直接code{cout<<"原密码错误!"<<endl;return 0;}while(1){cout<<"请输入新密码:"<<endl;cin>>temp1;cout<<"请再次输入新密码:"<<endl;cin>>temp2;if(strcmp(temp1,temp2)){cout<<"两次密码不相同,请重输!"<<endl;break;}cout<<"密码设置成功!"<<endl;strcpy(code,temp1); //保存新密码break;}return 1;}int Cdisk::new_user() //准备创建新用户{char n[10],c[10];int i=0,j;for(i=0;i<5;i++)if(user[i].get_status()==0) //是否有此用户,此尚未存在break;if(i==5){cout<<"已经达到最大用户5个,不能再创建!"<<endl;return 0;}user[i].set_status(1); //为新用户分配权利cout<<"请输入用户名:"<<endl;cin>>n;if(i>0) //已有其它用户存在{for(j=0;j<i-1;j++)if(!strcmp(user[j].get_name(),n)){cout<<"此用户名已存在!"<<endl;return 0;}}cout<<"请输入密码:"<<endl;cin>>c;user[i].set_user(n,c); //调用Cuse的成员函数,传递用户名与密码cout<<"恭喜,创建用户成功!"<<endl;return 1;}int Cdisk::first_dele_user() //删除用户{char n[10],c;int i;cout<<"请输入你要删除的用户名"<<endl;cin>>n;for(i=0;i<5;i++) //在查找用户的同时,得到用户序号iif(!strcmp(user[i].get_name(),n)&&user[i].get_status())break; //找到,跳出if(i==5){cout<<"出错啦,此用户不存在!"<<endl;return 0;}cout<<"确认删除此用户?确认Y,取消任意键"<<endl;cin>>c;if(c!='Y'&&c!='y'){cout<<"已经取消删除!"<<endl;return 0;}this->dele_user(i);cout<<"用户删除成功"<<endl;return 1;}Cuse::Cuse() //构造函数,初始化成员{status=0; //用户权利,即是否被创建标记length=0; //空间now=0; //当前目录Fhead=0; //文件Dhead=0; //目录}Cuse::~Cuse() //析构,清除程序占用的内存{disk_empty+=length;length=0;UFD *f=Fhead;DIR *d=Dhead;while(f!=0) //文件{if(f->next==0){this->dele_file(f);f=0;break;}while(f->next->next!=0)f=f->next;this->dele_file(f->next);f->next=0;f=Fhead;}while(d!=0) //目录{if(d->next==0){this->dele_dir(d);d=0;break;}while(d->next->next!=0)d=d->next;this->dele_dir(d->next);d->next=0;d=Dhead;}}int Cuse::new_file() //建立新文件{int i=0,j=0;UFD *f,*p=0;DIR *D;p=new UFD; //开辟一个新的文件结构体if(p==0){cout<<"无可用内存空间,创建文件失败!"<<endl;return 1;}cout<<"请输入建立的文件名:";cin>>p->name;if(now==0) //根目录下的文件链f=Fhead;else //当前目录下的文件链f=now->File_head;while(f!=0) //检查是否文件重名{if(!strcmp(p->name,f->name)){cout<<"此文件已存在!"<<endl;return 0; //退出}f=f->next;}cout<<"\n"<<"长度:";cin>>p->length;cout<<"\n"<<"属性(0:只读,1:读写):";cin>>p->attribute;cout<<endl;if(p->length>disk_empty) //空间不足{cout<<"文件太大,空间不足,当前空间为:"<<disk_empty<<endl;delete p;return 0;}disk_empty=disk_empty-p->length; //剩余空闲盘块//for(i=0;i<p->length&&i<10;i++) //文件较小时,直接地址,文件数据盘块号for(j;j<10000;j++) //位示图法if(disk_block[j]==0) //空闲{p->a[i]=j; //得到此空间disk_block[j]=1; //标记为已分配出去j++;break; //跳出寻找,为文件分配下一空间}p->p1=0; //一级索引p->p2=0; //二级索引if(p->length>10) //超过10,用一级索引{p->p1=new int[100]; //为一级索引分配100个空间for(i=10;i<p->length&&i<110;i++)for(j;j<10000;j++) //j,继续前面的值if(disk_block[j]==0){(p->p1)[i-10]=j;disk_block[j]=1;j++;break;}if(p->length>110) //超过110,得用二级索引{p->p2=new int[100][100]; //在一级索引的基础上,2维for(i=110;i<p->length;i++)for(j;j<10000;j++) //j,继续前面的值if(disk_block[j]==0){int m=(i-110)/100; //行int k=(i-110)%100; //列p->p2[m][k]=j;disk_block[j]=1;j++;break;}}}if(now==0) //根目录下的文件{p->next=Fhead; //后继结点指向头,即新指点在前Fhead=p; //新结点在头}else{p->next=now->File_head;now->File_head=p;}length+=p->length; //用户总空间大小增加if(now!=0) //子目录下空间大小增加{now->length+=p->length;D=now->above; //上一级目录while(D!=0) //上级目录(根目录已实现)空间增加{D->length+=p->length;D=D->above; //逐级向上}}}int Cuse::new_dir() //建立新目录{DIR *p,*h;cout<<"请输入新目录的名字:"<<endl;p=new DIR;cin>>p->name; //目录名p->Dir_head=0; //目录下的目录链为空p->length=0; //p->File_head=0; //目录下的文件为空if(now==0) //当前为主目录h=Dhead; //第一次时,h=0;指向目录链elseh=now->Dir_head;//当前的目录链while(h!=0) //此目录下存在其它子目录{if(!strcmp(h->name,p->name)){cout<<"此目录已存在!"<<endl;return 0;}h=h->next;}if(now==0) //当前为主目录{p->above=0; //主目录里目录的上一结点为0p->next=Dhead; //把原目录接入新目录后面(Dhead初始为0)Dhead=p; //Dhead始终指向最新目录结点}else{p->above=now; //当前目录为新目录的上一结点p->next=now->Dir_head; //反序插入新目录now->Dir_head=p; //更新目录链}cout<<"目录创建成功"<<endl;return 1;}int Cuse::goback() //向上返回{if(now==0){cout<<"已是主目录,不能向上!"<<endl;return 0;}now=now->above; //上一结点return 1;}int Cuse::open_dir() //打开目录{char name[10];DIR *p;if(now==0) //当前主目录p=Dhead;elsep=now->Dir_head; //p指向目录链cout<<"请输入你要打开的目录名:"<<endl;cin>>name;//int flag=0;while(p!=0){if(strcmp(p->name,name)==0){now=p; //找到目录,now标记return 1;}p=p->next;}cout<<"当前没此目录"<<endl;return 0;}int Cuse::first_dele_file() //删除文件的前面工作{char temp[10],a[5];cout<<"你要删除的文件名:"<<endl;cin>>temp;UFD *f=Fhead; //数据文件头指针UFD *above=0;if(now!=0)f=now->File_head; //当前目录下的数据文件while(f!=0){if(!strcmp(f->name,temp))break; //找到,跳出above=f; //标记第一个文件f=f->next;}if(f==0){cout<<"此文件不存在"<<endl;return 0;}cout<<"确定删除"<<f->name<<"文件吗?按0确定,其他键取消"<<endl;cin>>a;if(a[0]!='0'){cout<<"已取消删除文件。

相关文档
最新文档