/*这个程序是一个文件系统的模拟,使用前要先用构造目录程序构造好目录才能用*/
#include "stdio.h"
#include "string.h"
#define getpch(type,num) (type*)malloc(sizeof(type)*num)
struct ufd{ /* 用户文件目录 */
char filename[10];/*文件名*/
char procode[3];/*保护码*/
int length;
}*p;/*afd为运行文件目录*/
typedef struct ufd UFD;
struct afd_type{ /* 用户文件目录 */
char filename[10];/*文件名*/
char procode[3];/*保护码*/
int rw;
}afd[5];
struct mdf{ /* 主目录MDF */
char name[10];
struct ufd* directory; /*指向子目录的指针 */
}maindir[10];
typedef struct mdf MDF;
int usernum,opennum;/*usernum当前已有的用户数,opennum运行文件数目*/
int filenum[10];/*所有的用户目录下的文件数目*/
char username[10];/*当前进入系统的用户名*/
init()/*初始化,读入已有的目录,和初始化运行文件目录*/
{
int i,j;
FILE *fp;
fp=fopen("dat","rb");
fread(&usernum,sizeof(int),1,fp);
for(i=0;i<usernum;i++)
{
fread(maindir[i].name,sizeof(char)*10,1,fp);
p=getpch(UFD,10);
maindir[i].directory=p;
}
for(i=0;i<usernum;i++)
{
fread(&j,sizeof(int),1,fp);
filenum[i]=j;
p=maindir[i].directory;
fread(p,sizeof(UFD),10,fp);
}
opennum=0;/*运行文件数*/
}
create(int userid)
{
char cfilename[10];
int filelen,i;
char code[3];
if(filenum[userid]>=10)/*如果用户的文件已有10个*/
{
printf("用户的文件数量已达到上限,即10个!\n");
return ;
}
printf("请输入要建立的文件名:");
scanf("%s",cfilename);
for(i=0;i<filenum[userid];i++)/*检查是否有同名文件,有则提示然后返回*/
if(strcmp((p+i)->filename,cfilename)==0)
{
printf("文件名%s已存在!\n",cfilename);
return ;
}
printf("请输入要建立的文件的属性(输入3位的数字,对应:读,写,执行.):");
scanf("%s",code);
printf("请输入要建立的文件的长度:");
scanf("%d",&filelen);
strcpy(p[filenum[userid]].filename,cfilename);
strcpy(p[filenum[userid]].procode,code);
p[filenum[userid]].length=filelen;
filenum[userid]=filenum[userid]+1;
printf("文件名为:%s的文件建立成功!\n",cfilename);
}
deletefile(int userid)
{
char dfilename[10];
int i,j;
printf("请输入要删除的文件名:");
scanf("%s",dfilename);
for(i=0;i<filenum[userid];i++)
{
if(strcmp(p[i].filename,dfilename)==0)/*找到要删除的文件*/
{
/*if(p[i].procode[1]!='1')文件没有写权限,将不执行删除操作,直接返回
{
printf("该文件不能写!删除失败!");
return ;
}*/
for(j=i;j<filenum[userid]-1;j++)
{
strcpy(p[j].filename,p[j+1].filename);
strcpy(p[j].procode,p[j+1].procode);
p[j].length=p[j+1].length;
}
filenum[userid]--;
printf("文件删除成功!\n");
return ;
}
}
printf("找不到要删除的文件!\n");
}
closefile()
{
int i,j;
char filename[10];
if(opennum==0)
{
printf("当前还没有打开文件!\n");
return ;
}
printf("请输入要关闭的文件名:");
scanf("%s",filename);
for(i=0;i<opennum;i++)
{
if(strcmp(afd[i].filename,filename)==0)/*在运行文件目录中找到要关闭的文件*/
{
if(afd[i].rw==1)
{
printf("文件写回磁盘!\n");
}
for(j=i;j<opennum-1;j++)
{
strcpy(afd[j].filename,afd[j+1].filename);
strcpy(afd[j].procode,afd[j+1].procode);
afd[j].rw=afd[j+1].rw;
}
opennum--;
printf("文件%s已成功关闭!\n",filename);
return ;
}
}
printf("文件%s没有打开!关闭失败!\n",filename);
}
readfile()
{
int i;
char filename[10];
if(opennum==0)
{
printf("当前还没有打开文件!\n");
return ;
}
printf("请输入要读的文件名:");
scanf("%s",filename);
for(i=0;i<opennum;i++)
{
if(strcmp(afd[i].filename,filename)==0)/*在运行文件目录中找到要读的文件*/
{
if(afd[i].procode[0]!='1')/*文件没有读权限,将不执行读操作,提示返回*/
{
printf("该文件不能读!读失败!\n");
return ;
}
printf("文件%s已读完!\n",filename);
break ;
}
}
}
writefile()
{
int i;
char filename[10];
if(opennum==0)
{
printf("当前还没有打开文件!\n");
return ;
}
printf("请输入要写的文件的文件名:");
scanf("%s",filename);
for(i=0;i<opennum;i++)
{
if(strcmp(afd[i].filename,filename)==0)/*在运行文件目录中找到要关闭的文件*/
{
if(p[i].procode[1]!='1')/*文件没有写权限,将不执行写操作,提示返回*/
{
printf("该文件不能写!写失败!\n");
return ;
}
afd[i].rw=1;
printf("文件%s已写完!\n",filename);
return ;
}
}
printf("文件%s还没有打开!\n");
}
openfile(int userid)
{
int i;
char filename[10];
if(opennum>=5)
{
printf("不能打开太多文件!\n");
return ;
}
printf("请输入要打开的文件的文件名:");
scanf("%s",filename);
for(i=0;i<opennum;i++)
{
if(strcmp(afd[i].filename,filename)==0)/*在运行文件目录中找到要关闭的文件*/
{
printf("文件%s已打开!\n",filename);
return ;
}
}
for(i=0;i<filenum[userid];i++)
{
if(strcmp(p[i].filename,filename)==0)/*在运行文件目录中找到要打开的文件*/
{
strcpy(afd[opennum].filename,filename);
strcpy(afd[opennum].procode,p[i].procode);
afd[opennum].rw=0;
opennum++;
printf("文件%s已打开!\n",filename);
return ;
}
}
printf("打不到要文件打开的文件,打开文件失败!\n");
}
save()
{
/*开始把输入的构造信息写入到文件dat*/
int i;
FILE *fp;
fp=fopen("dat","wb");
fwrite(&usernum,sizeof(int),1,fp);
for(i=0;i<usernum;i++)
{
fwrite(maindir[i].name,sizeof(char)*10,1,fp);
}
for(i=0;i<usernum;i++)
{
fwrite(&filenum[i],sizeof(int),1,fp);
p=maindir[i].directory;
fwrite(p,sizeof(UFD),10,fp);
}
fclose(fp);
printf("当前目录信息已保存!\n");
}
display()
{
int i,j;
for(i=0;i<usernum;i++)
{
printf("%s\n",maindir[i].name);
printf("\t文件名\t保护码\t文件长度\n");
for(j=0;j<filenum[i];j++)
{
printf("\t%s\t%s\t%d\n",maindir[i].directory[j].filename,maindir[i].directory[j].procode,maindir[i].directory[j].length);
}
}
printf("打开的文件:\n文件名\t保护码\t读写指针(为1表示已进行过写操作)\n");
for(i=0;i<opennum;i++)
{
printf("%s\t%s\t%d\n",afd[i].filename,afd[i].procode,afd[i].rw);
}
}
main()
{
int i,j,userid;
char choose,ch;
init();/*读入已有目录*/
/*测试用
printf("usernum:%d\n",usernum);
for(i=0;i<usernum;i++)
{
printf("%s\n",maindir[i].name);
p=maindir[i].directory;
for(j=0;j<filenum[i];j++)
{
printf("name:%s\n",p[j].filename);
printf("code:%d\n",p[j].procode);
printf("length:%d\n",p[j].length);
}
}
*/
printf("username:");
scanf("%s",username);
j=0;
for(userid=0;userid<usernum;userid++)
if(strcmp(maindir[userid].name,username)==0)
{
j=1;
break;
}
if(j!=1)
{
printf("输入的用户名不存在!");
return ;
}
p=maindir[userid].directory;
printf("用户%s目录下的文件有:\n",username);
for(i=0;i<filenum[userid];i++)
printf("%s\n",p[i].filename);
opennum=0;
ch='y';
while(ch=='y'||ch=='Y')
{
wenjian.rar_文件管理系统
版权申诉
59 浏览量
2022-09-21
06:21:23
上传
评论
收藏 2KB RAR 举报
weixin_42653672
- 粉丝: 94
- 资源: 1万+
最新资源
- 2024年高考志愿填报-推荐专业+报考学校+职业发展.doc
- 大数据三、Hadoop-MapReduce
- Python 经典模拟游戏:康威生命模拟游戏.py
- 在知乎复制的一个回答,不要乱转载哦
- 目标检测-城市道路行驶车辆检测数据集-20000张图-+对应VOC-COCO-YOLO三种格式标签+数据集划分脚本
- 环境所需要的全部依赖列表
- 族谱管理系统c++语言,提供多种功能
- 屏幕截图 2024-06-04 201310.png
- Java毕设项目 - ssm基于HTML5的互动游戏新闻网站的设计与实现演示录像(高分大作业)
- 计算机专业毕设项目 - php衡水学院校友管理 演示录像 2021(高分大作业)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈