当前位置:文档之家› 实验八,文件管理

实验八,文件管理

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

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

二、实验要求:要求设计一个 n个用户的文件系统,每次用户可保存m个文件,用户在一次运行中只能打开一个文件,对文件必须设置保护措施,且至少有Create、delete、open、close、read、write等命令。

三、实验内容:设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件。

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

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

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

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

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

四、运行结果:五、心得体会:通过这次试验我学会了如何创建一个用户,已经在此用户下保存多个文件,同时也学会了如何为文件设置保护措施,只允许单个用户访问。

这些综合性的知识都在本实验中得到了很好的运用,因此我对文件的管理也得到了一定的锻炼。

六、附录:#include <iostream.h>#include <string.h>#include <stdio.h>#include<iomanip.h>struct user {char name[10];}user[10];int in=0;struct link {struct file {char name[10];int lenght;int write;int read;int exe;}file[10];int used;}link[10];char name[10];int p;int checkuser();void createuser();void openall();void openfile();void createfile();void deletefile();void changeprotect();void write();void read();int find();void main(){int ch;char c;cout<<"*******************文件管理统*********************"<<endl<<endl<<endl;str: cout<<"用户名:";cin>>name;p=checkuser();if(p==10) {cout<<"用户不存在!"<<endl;cout<<"是否加为用户(y/n):";cin>>c;if(c=='y')createuser();else goto str;}printf("请输入操作:\n");menu: printf("1.打开所有文件.\n2.打开某一文件.\n3.添加文件.\n4.删除文件.\n5.改文件保护位.\n6.写文件.\n7.读文件.\n8.退出.\nchoose1,2,3,4,5,6,7,8:"); cin>>ch;if(ch==1)openall();if(ch==2)openfile();if(ch==3)createfile();if(ch==4)deletefile();if(ch==5)changeprotect();if(ch==6)write();if(ch==7)read();if(ch==8) {printf("是否退出程序(y/n):"); cin>>c;if(c=='y') goto ext;goto str;}goto menu;ext:cout<<"拜拜"<<endl;}int checkuser(){int s;for(int i=0;i<10;i++){s=strcmp(name,user[i].name); if(s==0) return i;}return 10;}void createuser(){strcpy(user[in].name,name); link[in].used=0;in++;}void openall(){if(link[p].used==0)cout<<"此文件夹为空!"<<endl;else{cout<<"文件名------读保护------写保护------执保护"<<endl;for(int i=0;i<link[p].used;i++)cout<<link[p].file[i].name<<setw(12)<<link[p].file[i].write<<setw(12)<<lin k[p].file[i].read<<setw(12)<<link[p].file[i].exe<<endl;}}void openfile(){cout<<"输入文件名:";cin>>name;int i=find();if(i==10)cout<<"此文件不存在!"<<endl;else{cout<<"文件名------读保护------写保护------执保护------文件长度"<<endl; cout<<link[p].file[i].name<<setw(12)<<link[p].file[i].write<<setw(12)<<lin k[p].file[i].read<<setw(12)<<link[p].file[i].exe<<setw(12)<<link[p].file[i ].lenght<<endl;}}void createfile(){int a=link[p].used;link[p].used++;cout<<"输入文件名:";cin>>link[p].file[a].name;link[p].file[a].write=0;link[p].file[a].read=0;link[p].file[a].exe=0;link[p].file[a].lenght=0;}void deletefile(){cout<<"输入文件名:";cin>>name;int i=find();if(i==10)cout<<"此文件不存在!";else {for(int j=i;j<9;j++){strcpy(link[p].file[i].name,link[p].file[i+1].name); link[p].file[i].write=link[p].file[i+1].write;link[p].file[i].read=link[p].file[i+1].read;link[p].file[i].exe=link[p].file[i+1].exe;}link[p].used--;}}void changeprotect(){cout<<"输入文件名:"<<endl;cin>>name;int i=find();if(i==10)cout<<"此文件不存在!";else {cout<<"改变保护值:读,写,执:(0/1,0/1,0/1):"; cin>>link[p].file[i].write;cin>>link[p].file[i].read;cin>>link[p].file[i].exe;}}void write(){cout<<"输入文件名:"<<endl;cin>>name;int l;int i=find();if(i==10)cout<<"此文件不存在!";else {cout<<"此文件已经打开!";cout<<"文件将要写的长度:";cin>>l;link[p].file[i].lenght+=l;}}void read(){cout<<"输入文件名:"<<endl;cin>>name;int i=find();if(i==10)cout<<"此文件不存在!"<<endl;else {cout<<"文件已经打开!"<<endl;cout<<"文件长度为:"<<link[p].file[i].lenght<<endl; }}int find(){int a;for(int i=0;i<10;i++){a=strcmp(name,link[p].file[i].name);if(a==0) return i;}return 10;}。

相关主题