一个简单的文件系统的详细设计操作系统课程设计.pdf

上传人:w*** 文档编号:80739518 上传时间:2023-03-23 格式:PDF 页数:43 大小:1.49MB
返回 下载 相关 举报
一个简单的文件系统的详细设计操作系统课程设计.pdf_第1页
第1页 / 共43页
一个简单的文件系统的详细设计操作系统课程设计.pdf_第2页
第2页 / 共43页
点击查看更多>>
资源描述

《一个简单的文件系统的详细设计操作系统课程设计.pdf》由会员分享,可在线阅读,更多相关《一个简单的文件系统的详细设计操作系统课程设计.pdf(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 word 文档 可自由复制编辑 计算机系综合性实验 实 验 报 告 课程名称 操作系统实验报告 实验学期 2013 至 2014 学年 第 一 学期 学生所在系部 计算机与信息管理系 年级 2011 专业班级 计算机 102 学生姓名 王强 黄新潮 张蒙 学号 11030082 11030070 11030077 任课教师 陆丽娜 实验成绩 计算机系制 word 文档 可自由复制编辑 一个简单的文件系统的详细设计 一、实验目的(1)阅读并调试一个简单的文件系统,模拟文件管理的工作过程。从而对各种文件操作命令的实质内容和执行过程有比较深入的了解。(2)了解设计一个 n 个用户的文件系统,每个用

2、户可以保存 M 个文件。用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有 create、delete、open、close、read、write 等命令。二、实验要求 1、根据流程图阅读所给文件系统源程序,并对源程序加以注释(注释量达 70%以上)。2、修改、完善该系统,指出程序的 bug。三、文件系统功能设计 1.功能设计 该文件系统是一个多用户、多任务的文件系统。对用户和用户的文件数目并没有上限。也就是说该系统允许任何用户申请空间,而且在其目录下的文件数目并不做任何的限制。该系统可以支持的操作命令如下:bye用户注销命令。当使用该命令时,用户退出系统,注销该用户功能设计并

3、回到登陆界面。命令格式:bye close删除用户注册信息命令。执行该命令后,用户在系统中的所有信息,包括该用户目录下的所有文件都被删除。命令执行完成后返回登陆界面。命令格式:close create在当前目录下创建一个文件,且该文件不能跟当前已有的文件重名。该文件的管理信息登记在用户文件信息管理模块中。执行完该命令后回到执行命令行。命令格式:createfile1 其中:“”符为提示符,file1 为要创建的文件名。delete删除当前用户目录下的一个文件,命令执行完毕返回至命令行。命令格式:deletefile1 其中:file1 为要删除的文件名。list显示当前注册目录下的所有文件信息

4、,包括文件名、文件长度、文件操作权限。命令格式:list chmod改变某个文件的执行权限,但前提是该文件是该用户目录下的文件。命令格式:chmodfile1。其中:file1 为要授权的文件名。open在 window 界面下打开某个文件。执行该命令后,文件 file1 将用在 windows界面下的文件形式打开。用户可以在这个方式中对文件进行修改,并将修改后的内容保存。word 文档 可自由复制编辑 命令格式:openfile1 其中:file1 为要打开的文件名。read读文件信息。将文件信息读入并显示在终端上。命令格式:readfile1 其中:file1 为要读的文件名。write向

5、某个文件写入新的信息。用户可以选择用覆盖原来内容的方式或和在文件的末尾追加新信息的方式写入信息。当要退出时输入“#”即可。(2)系统采用二级文件目录。设置主目录(MFD)和用户文件目录(UFD),分别以文件的方式保存在磁盘中。在主目录中有注册用户的用户名和另一标志该用户目录下是否有文件的指针标记。用户文件目录采用用户名作为文件名保存于磁盘,以便检索时方便对应。在用户文件目录中保存着该目录下所有文件的文件名称、保护码、文件长度。(3)该系统大量使用高级语言中的文件操作函数,所以能实际看到文件的创建、写入、读出、删除等效果。2.功能设计实现总体流程 选择操作用户登录用户注册退出在MFD中找到该用户

6、?初始化命令关键字输入操作命令删除文件读文件写文件创建文件删除文件打开文件改变权限保存当前主目录显示文件继续操作执行?开始结束结束Y N N Y word 文档 可自由复制编辑 3.主要数据结构 struct UFD/用户文件模块 char filename32;/文件名 int safecode;/文件保护码 long length;/文件长度*curfile=NULL;这个是用户文件模块数据结构,结构体的名字是:UFD,在结构体里面定义了三个成员,filename,safecode,length,分别用于存储用户文件的名字,文件保护码,文件的长度,*curfile=NULL;,这是一个结构

7、体类型的指针,开始初始化为 NULL.struct MFD/主文件模块 char username32;/存放用户名 bool filepoint;/用户目录下的文件指针,false 表示目录为空,true 为该用户目录中有文件*curuser=NULL,*elseuser=NULL;这个是主文件模块的数据结构,有两个成员,username,filepoint,分别用于存放用户名,用户目录下面的文件指针.*curuser=NULL,*elseuser=NULL;这两个是主文件的结构体变量,用于访问结构体里面的数据成员 4.主要功能模块 1.int LoginDisplay()/登陆选项操作函数

8、 2.bool Login(int SELETE)/用户登陆,注册函数 3.void DisplayUFD()/打印用户信息,包括用户的各个文件 4.void ByeFile(bool BOOL)/注销函数,调用次函数用户可以退出系统 5.bool ClearUserFile()/用户要将自己的注册目录从系统彻底删除 6.void ClearUserMes()/删除用户全部信息 7.void DeleteUser()/删除用户注册目录的操作 8.void CreatFile()/在当前用户目录下创建文件 9.void DeleteFile()/删除当前目录下一个文件的操作 10.bool Qu

9、eryModElse(bool BOOL,bool&flag)/查询其它用户目录下文件的文件 11.bool QueryMod(bool BOOL)/查询权限 12.bool WriteRight(int len,bool BOOL)/查看是否已经正确地写入到该文件信息中,是则返回真值 13.void WriteLengthToFile(int Len,bool BOOL)/将文件长度写入文件管理模块中 14.void WriteFile()/向文件写入信息的操作 15.void ReadFile()/读文件函数 16.void ChangeMod()/修改某文件的执行权限 17.void E

10、xecute(int i,int len,int cmdset)/执行命令函数 word 文档 可自由复制编辑 18.void Command()/读取用户输入的命令,并将其转换成系统能识别的命令 5小组成员及分工 负责人:姓名 模 块 黄新潮 组长分配任务,总结实验心得,分析流程图,给组员讲解 王强 对源程序加以注释、修改 张蒙 对源程序读取,运行,截图,完善 四、文件系统功能模块详细设计流程图 1.int LoginDisplay()/登陆选项操作函数 Y N Scanf SELETE_1 Return SELETE_1 0=SELETE_1LOGIN.exe End Cout error

11、 图 4 ByeFile word 文档 可自由复制编辑 5.bool ClearUserFile()/用户要将自己的注册目录从系统彻底删除 6.void ClearUserMes()/删除用户全部信息 Name=username.exe Remove Name Update(False)MFD(图 4.1)End 图 6 ClearUserMes Begin N Y Y N Begin File=username.exe File EOF Temp=Malloc(UFD)Fread(Temp,UFD,1,file)Remove Temp-file Return True End 图 5 Cl

12、earUserFile word 文档 可自由复制编辑 7.int DeleteUser()/删除用户注册目录的操作 8.void CreatFile()/在当前用户目录下创建文件 N Other N Y|yY Y Begin Buffer Scanf Ch Fread(NewFile,UFD,1,username.exe)Server&Set Buffer Cout error End 图 8 CreatFile Can Write Ch Scanf Buffer Cout Ture NewFile=Malloc(UFD)Other Y Y|y End 图 7 DeleteUser Begi

13、n ch Scanf ch R R=ClearUserFile(图 5)ClearUserMes(图 6)Return 1 word 文档 可自由复制编辑 9.void DeleteFile()/删除当前目录下一个文件的操作 Other N Y|y N Y Y Begin Ture?Ch Scanf Ch Remove Buffer End 图 9 DeleteFile Search UFD(图 2.1)Name.exe Update(False)UFD(图 4.1)word 文档 可自由复制编辑 10.bool QueryModElse(bool BOOL,bool&flag)/查询其它用户

14、目录下文件的文件 N N N N Y Y Y 31|33 Y Y N N Y Begin Temp.File=Buffer Cout error Fread(Temp,UFD,1,user.exe)Return True End 图 10 QueryModElse EOF?Temp?Return False Temp=Malloc(UFD)BOOL 32|33 word 文档 可自由复制编辑 11.bool QueryMod(bool BOOL)/查询权限 N N Y Y N Y N N N Y Y Begin Username.exe EOF Fread(temp,UFD,1,usernam

15、e.exe)Return True Else=Malloc(MFD)End 图 11 QueryMod buffer temp=Malloc(UFD)EOF Fread(Else,MFD,1,Login.exe)Username=Else Ture QueryModElse(图 10)Return False word 文档 可自由复制编辑 12.bool WriteRight(int len,bool BOOL)/查看是否已经正确地写入到该文件信息中,是则返回真值 N Y N N Y Y N Y N N Y Y Begin Username.exe EOF Fread(temp,UFD,1,

16、username.exe)Length=len Return False End 图 12 WriteRight temp=Malloc(UFD)Buffer Fwrite(temp,UFD,1,outfilelocate.exe)outfilelocate.exe Length+len EOF Buffer Fread(temp,UFD,1,username.exe)BOOL Remove username.exe outfilelocate.exe-username.exe Return Ture word 文档 可自由复制编辑 13.void WriteLengthToFile(int

17、Len,bool BOOL)/将文件长度写入文件管理模块中 14.void WriteFile()/向文件写入信息的操作 N N 2 Other Y Y 2 1 Y Y N N Begin Buffer End Get char 图 14 WriteFile Scanf Chmod Chmod QueryMod(true)(图 11)True?Char!=#Fput(char,buffer)Get char Char!=#Fput(char,buffer)WriteLength ToFile(图 11)Cout error N Y Y Y N N Begin LOGIN.exe Fread(E

18、lse,MFD,1,LOGIN.exe)End Cout error 图 13 WriteLengthToFile Else=Malloc(MFD)EOF WriteRight(图 12)True?word 文档 可自由复制编辑 15.void ReadFile()/读文件函数 16.void ChangeMod()/修改某文件的执行权限 Other Y N Y|y Begin True?Scanf Mod End Cout error 图 16 ChangeMod Printf Mod Test Ch Search UFD(图 2.1)Scanf ch Update UFD(图 4.1)Re

19、move username.exe outfilelocate.exe-username.exe N Y Y Y N N Begin True?Putchar(ch)End Cout error 图 15 ReadFile Fgetchar(buffer)Buffer QueryMod(False)(图 12)EOF?word 文档 可自由复制编辑 17.int Execute(int i,int len,int cmdset)/执行命令函数 9 8 7 6 5 4 2 3 1 N Y N Y Begin Cmdi!=0 Bufferi=Cmdi End Cout error 图 17 Exe

20、cute ListAllFile Buffer?ChangeMod(图 16)ByeFile(图 4)OpenFile Return Temp cmdset DeleteUser(图 7)CreatFile(图 8)DeleteFile(图 9)ReadFile(图 15)WriteFile(图 14)word 文档 可自由复制编辑 18.void Command()/读取用户输入的命令,并将其转换成系统能识别的命令 五、实验运行结果/*文件名:Simple_file_system.c*功 能:简单文件管理系统模拟程序 */#include#include#include#include#in

21、clude conio.h#include#define NULL 0#define keynum 10 Y N Y N Y N Y Begin 1 Scanf cmd End 图 18 Command Bufferi=cmdi|len-1 Cmdset=0|mid 二分查找命令编号 Cmdset EndIt?Execute(图 17)word 文档 可自由复制编辑#define getspace(type)(type*)malloc(sizeof(type)/宏定义 申请内存 char cmd64;/存放用户输入命令 char buffer36;/char user32;/存放当前登陆的用户

22、名 typedef char ALFA12;ALFA KWORDkeynum;/-struct UFD/用户文件管理模块 char filename32;/文件名 int safecode;/文件保护码 long length;/文件长度*curfile=NULL;/-struct MFD/用户登陆信息管理模块 char username32;/用户名 bool filepoint;/用户目录下的文件指针,false 表示目录为空,true 为该用户目录中有文件*curuser=NULL,*elseuser=NULL;typedef UFD UFD;/重命名 typedef MFD MFD;v

23、oid main();/-void KeyWord()/初始化命令关键字 strcpy(KWORD 1,bye);/用户注销命令 strcpy(KWORD 2,chmod);/改变文件的执行权限 strcpy(KWORD 3,close);/删除用户注册信息 strcpy(KWORD 4,create);/在当前目录下创建一个文件 strcpy(KWORD 5,delete);/删除当前用户目录下的一个文件 strcpy(KWORD 6,list);/显示当前注册目录下的所有文件信息 strcpy(KWORD 7,open);/打开文件 strcpy(KWORD 8,read);/读文件信息

24、strcpy(KWORD 9,write);/向文件写入新的信息 /-int LoginDisplay()/登陆选项操作函数 int SELETE_1=0;/定义整型数存放选项 do /循环控制 cout *请选择操作*n1、用户登陆 2、用户注册 0、退出SELETE_1;/输入要选择的命令 while(SELETE_12);/选项判断 system(cls);/清屏 return SELETE_1;/返回选项数 /-bool Login(int SELETE)/用户登陆,注册函数 FILE*fp,*fp1,*fp2;/定义文件 char name12;/定义数组存放登录名 switch(S

25、ELETE)/switch 选择 case 1:/用户登陆 if(fp=fopen(LOGIN.exe,rb)=NULL)/打开用户注册目录管理文件 coutn 错误:不能打开登陆文件。endl;/显示错误 getch();/读取结束符 system(cls);/清屏 return false;/返回 curuser=getspace(MFD);/用户名申请空间 coutname;/输入用户登陆名 while(!feof(fp)/检查该用户是否合法 fread(curuser,sizeof(MFD),1,fp);/文件读取 if(strcmp(curuser-username,name)=0)

26、/比较输入用户名是否与存在用户名相同 break;if(feof(fp)/如果没有找到跟当前登陆用户名相同的管理信息,执行下列代码 coutn 错误:该用户不存在。endl;/显示“错误:该用户不存在”fclose(fp);/关闭文件 return false;/返回 else fclose(fp);/关闭文件 return true;/返回 word 文档 可自由复制编辑 break;/跳出 case 2:/新用户注册 if(fp=fopen(LOGIN.exe,ab)=NULL)/如果登陆信息管理文件不存在 fp=fopen(LOGIN.exe,wb+);/创建该信息管理文件 char n

27、ame12;curuser=getspace(MFD);/用户申请空间 while(1)coutn *新用户注册*endl;coutname;/输入用户注册名 fp1=fopen(LOGIN.exe,rb);/打开登陆文件,只允许读数据 while(!feof(fp1)/查看该用户名是否被别的用户占用 fread(curuser,sizeof(MFD),1,fp1);/文件读取 if(strcmp(curuser-username,name)=0)coutn 该用户已经存在,请重新输入!username,name);/拷贝输入的用户名到用户名结构体 curuser-filepoint=NULL

28、;/文件指针置空 fwrite(curuser,sizeof(MFD),1,fp);/用户信息写入文件 strcpy(user,curuser-username);/生成用户文件管理模块 strcat(user,.exe);/用于管理用户目录下的各个文件 fp2=fopen(user,wb+);/打开文件,允许读和写 fclose(fp2);/关闭 fp2 coutn 注册成功!endl;/提示注册成功 LoginDisplay();fclose(fp1);/关闭 fp1 fclose(fp);/关闭 fp break;fp=fopen(LOGIN.exe,rb);/显示当前注册用户的名称 w

29、hile(1)fread(curuser,sizeof(MFD),1,fp);/文件读取 word 文档 可自由复制编辑 if(feof(fp)/检查是否最后用户 break;coutusernamefilepoint=false)/当前用户目录下没有任何文件存在 coutn 用户 username 文件夹是空的username);/拷贝用户名到定义 strcat(filename,.exe);/扩展名.exe if(fp=fopen(filename,rb)=NULL)/打开用户文件信息管理模块 coutn 无法打开用户:username 的文件!endl;/显示 getch();/读取结束

30、符 return;else /读入并将用户全部文件信息打印在终端 cout用户:username目录下的文件:endl;UFD*ufd;/申请文件模块 int i=0;ufd=getspace(UFD);/申请存放用户文件模块的空间 while(1)fread(ufd,sizeof(UFD),1,fp);/文件读取,把文件信息读到用户中 if(feof(fp)/全部输出 break;word 文档 可自由复制编辑 else /打印信息 coutfilenametlengthtsafecodeendl;/输出文件信息 fclose(fp);/关闭文件 /-void ByeFile(bool BO

31、OL)/注销函数,调用次函数用户可以退出系统 FILE*infile,*outfile;/定义文件 char out50;/定义数组 out50 strcpy(out,outfilelocate.exe);/拷贝信息到数组 if(infile=fopen(LOGIN.exe,rb)=NULL)/检查是否保存 coutn 保存错误。;/fclose(infile);return;else if(outfile=fopen(out,wb+)=NULL)/申请一个缓冲区管理模块 /存放用户更新后的全部信息 coutusername,curuser-username)=0)/判断是否与用户名相同 if

32、(BOOL)/更新当前用户信息的操作 fwrite(curuser,sizeof(MFD),1,outfile);/写文件 else continue;/如果用户想把注册目录从系统中彻底删除 /则执行该操作 word 文档 可自由复制编辑 else fwrite(mfd,sizeof(MFD),1,outfile);/写入新的模块 fclose(infile);fclose(outfile);/关闭文件 remove(LOGIN.exe);/将旧的该用户的文件管理模块删除 rename(out,LOGIN.exe);/将新的用户的文件管理模块重命名为用户目录下的/管理模块 /-bool Cle

33、arUserFile()/用户要将自己的注册目录从系统彻底删除/首先将该用户目录下的全部文件删除 FILE*fp;char file50;/定义数组 file50 strcpy(file,curuser-username);/拷贝信息到数组 strcat(file,.exe);/扩展名.exe if(fp=fopen(file,rb)=NULL)/打开用户文件信息管理模块 /fclose(fp);coutfilename);/删除文件 fclose(fp);return true;word 文档 可自由复制编辑/-void ClearUserMes()/删除用户全部信息 char name50

34、;/定义数组 name50 strcpy(name,curuser-username);/拷贝用户名到数组 strcat(name,.exe);/扩展名.exe remove(name);/从磁盘中删除用户文件信息管理模块 ByeFile(false);/更新系统的用户登陆信息管理模块 /-void DeleteUser()/删除用户注册目录的操作 int SELETE;/定义 SELETE char ch;/定义 ch coutn 该操作将会是你在系统所有信息删除,下次登陆时你必须重新申请用户名!endl;coutn 你确定要删除你在系统中的注册信息吗?Y/Nch;/输入选择 switch(

35、ch)/提示用户确认删除 case Y:case y:if(ClearUserFile()/如果用户的全部文件已经删除了 /则可以将该用户的文件信息管理模块也从磁盘中删除 /以免在没完全删除文件却删了该文件信息管理模块 /使得这些文件无法再进行管理造成磁盘空间的浪费 ClearUserMes();/删除文件信息管理模块 break;default:coutfilepoint=true;/用户目录下的文件指针置真 if(fp=fopen(buffer,r)=NULL)/如果没有跟用户输入文件名相同的文件 if(fp=fopen(buffer,w)=NULL)/判断文件是否为空 word 文档 可

36、自由复制编辑 coutn 创建文件失败!;/显示 /fclose(fp);return;fclose(fp);/关闭文件 else /用户要创建的文件已经存在 coutch;/输入选择 switch(ch)case Y:case y:coutbuffer;/输入新文件名 strcat(buffer,.txt);/扩展名.txt fclose(fp);/关闭文件 if(fp=fopen(buffer,w)=NULL)/判断文件是否为空 coutusername);/复制用户名到字符串 user(用户)strcat(user,.exe);/扩展名.exe curfile=getspace(UFD)

37、;/申请空间 strcpy(curfile-filename,buffer);/文件名 curfile-length=0;/该文件长度为零 curfile-safecode=30;/设置该文件的默认权限 /11 00,文件主有读和写权,其他用户没有读写权 if(fp=fopen(user,ab)=NULL)/判断是否为合法用户 coutn 错误:你可能不是合法用户。endl;getch();/读取结束符 word 文档 可自由复制编辑 else fwrite(curfile,sizeof(UFD),1,fp);/将该文件信息写入用户文件信息管理模块中 coutn 文件 filename 创建成

38、功!;fclose(fp);/关闭文件 /-void DeleteFile()/删除当前目录下一个文件的操作 char ch;/定义字符型变量 ch FILE*infile,*outfile;/定义文件 coutn 确定要删除文件:buffer Y/Nch;/提示用户确认删除 switch(ch)case Y:case y:/更新用户文件信息管理模块,这里同样使用缓冲区模块来更新 /方法与上面将到的类似 char out50,in50;/定义数组 strcpy(out,outfilelocate.exe);/拷贝文件到数组 strcpy(in,curuser-username);/拷贝用户名到

39、数组 strcat(in,.exe);/扩展名.exe if(infile=fopen(in,rb)=NULL)/打开该用户的文件信息管理模块 coutn 保存错误。;/fclose(infile);return;else if(outfile=fopen(out,wb+)=NULL)/打开读写文件,判断是否为空 coutfilename,buffer)=0)/要进行更新的信息 continue;else fwrite(ufd,sizeof(UFD),1,outfile);/写入新模块 fclose(infile);fclose(outfile);/关闭文件 remove(in);/在磁盘移除

40、就模块 rename(out,in);/新模块命名为当前用户文件信息管理模块 remove(buffer);/从磁盘中删除该文件 break;default:break;/-void ListAllFile()/显示当前用户目录下的文件信息 DisplayUFD();/调用打印函数 void WriteLengthToFile(int Len,bool BOOL);/函数申明/-void OpenFile()/在 window 模式下打开该文件 FILE*fp;/定义文件 char ch;int i=0;system(buffer);/buffer 为文件名,如:file1.txt fp=fo

41、pen(buffer,r);/打开文件进行读操作 while(1)/获取新文件的长度 if(feof(fp)/判断是否最后一个 break;ch=fgetc(fp);/按字符读取 i+;/每读取一次,长度+1 WriteLengthToFile(i,false);/将修改后的文件长度写入管理表 /-bool QueryModElse(bool BOOL,bool&flag)/查询其它用户目录下文件的文件/当该文件的权限允许当前用户对其执行有关操作时,返回 ture word 文档 可自由复制编辑 FILE*fp;/定义文件 char user50;UFD*ufd=getspace(UFD);/

42、elseuser 表示除当前用户外的所有用户注册目录 strcpy(user,elseuser-username);/拷贝用户名到数组 strcat(user,.exe);/扩展名.exe if(fp=fopen(user,rb)=NULL)/打开一个其它的用户文件信息管理模块 /fclose(fp);coutfilename,buffer)=0)/判断是否可以进去其他用户文件管理模块 if(BOOL)/该用户请求写该文件 if(ufd-safecode=31|ufd-safecode=33)/1101、1111最后一位为1,有写权 return true;else coutn 你无权对文件

43、buffersafecode=32|ufd-safecode=33)/1110、1111 倒数第二位为 1,有读权 return true;else coutn 你无权对文件 bufferusername);/拷贝用户名到数组 strcat(user,.exe);/扩展名.exe if(fp=fopen(user,rb)=NULL)/打开用户文件信息管理模块 /fclose(fp);coutfilename,buffer)=0)/在当前用户注册目录下 /找到该文件,返回真值 fclose(fp);return true;/-bool WriteRight(int len,bool BOOL)/

44、查看是否已经正确地写入到该文件信息中/是则返回真值 char user50,outfile50;FILE*fp,*fp1;/定义文件 strcpy(user,elseuser-username);/拷贝用户名到数组 strcat(user,.exe);/扩展名.exe if(fp=fopen(user,rb)=NULL)/判断文件是否为空 /fclose(fp);return false;/返回 else UFD*ufd=getspace(UFD);/申请空间 while(1)/在此用户目录下查找匹配文件 fread(ufd,sizeof(UFD),1,fp);/读取文件 if(feof(fp

45、)/判断是否有文件 fclose(fp);/关闭文件 return false;if(strcmp(ufd-filename,buffer)=0)/比较文件 /找到要写入新的长度的文件 strcpy(outfile,outfilelocate.exe);/扩展名.exe if(fp1=fopen(outfile,wb+)=NULL)/打开文件是否为空 coutfilename,buffer)=0)/对文件进行比较 /找到匹配的文件 if(BOOL)ufd-length+=len;/在文件末追加内容的操作 else ufd-length=len;/覆盖原文件内容 fwrite(ufd,sizeo

46、f(UFD),1,fp1);/写文件 fclose(fp);fclose(fp1);/关闭文件 remove(user);/移除 rename(outfile,user);/重命名 return true;/-void WriteLengthToFile(int Len,bool BOOL)/将文件长度写入文件管理模块中/因为当前用户可以对其它用户的文件进行操作(只要权限允许)/所以应该在整个文件系统目录下查找该文件的位置 FILE*fp;if(fp=fopen(LOGIN.exe,rb)=NULL)/不能打开文件 coutn 写入文件长度错误_1!;/fclose(fp);return;el

47、se elseuser=getspace(MFD);/申请空间 while(1)fread(elseuser,sizeof(MFD),1,fp);/读文件 if(feof(fp)/判断是否可读 break;else if(WriteRight(Len,BOOL)/查看是否已经正确地写入到该文件信息中 fclose(fp);return;word 文档 可自由复制编辑 coutn 写入文件长度错误_2!;fclose(fp);return;/-void WriteFile()/向文件写入信息的操作 if(!QueryMod(true)/查询当前用户对该文件是否有写权 return;/对该文件没有

48、写权则返回 char ch;int i=0;FILE*fp;if(fp=fopen(buffer,r)=NULL)/查询该文件是否存在 coutn 该文件不存在,请创建该文件后再写入。;/显示 /fclose(fp);return;fclose(fp);/关闭文件 coutn 请选择写入方式:endl;cout 1、覆盖原文件 2、在原文件末尾写入 3、取消ch;/选择写入方式 cout开始输入正文:endl;switch(ch)case 1:/覆盖原文件 if(fp=fopen(buffer,w)=NULL)/打开文件是否为空 coutn 文件打开失败。;else ch=getchar();

49、while(ch!=#)/将新的文件内容写入到文件的磁盘位置中 i+;fputc(ch,fp);/按字符写入 ch=getchar();fclose(fp);/关闭文件 WriteLengthToFile(i,false);/将文件长度写入文件管理模块 break;word 文档 可自由复制编辑 case 2:/在原文件末尾写入 if(fp=fopen(buffer,a)=NULL)/打开文件是否为空 coutn 文件打开失败。;else ch=getchar();while(ch!=#)/将新的文件内容写入到文件的磁盘位置中 i+;fputc(ch,fp);/按字符写入 ch=getchar

50、();fclose(fp);WriteLengthToFile(i,true);/将文件长度写入文件管理模块 break;default:/取消 break;/-void ReadFile()/读文件函数 if(!QueryMod(false)/查询当前用户是否有权读该文件 return;/没有读取权限,则返回 FILE*fp;if(fp=fopen(buffer,r)=NULL)/打开该文件 coutbuffer;/输出文件名 coutn 该文件不存在。;return;else char ch;ch=fgetc(fp);/按字符读 while(ch!=EOF)/将该文件信息逐个输出到终端 p

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 解决方案

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁