文件管理系统.doc_第1页
文件管理系统.doc_第2页
文件管理系统.doc_第3页
文件管理系统.doc_第4页
文件管理系统.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

文件管理系统1.设计内容: 模拟一个简单的文件管理系统。实现下列功能: 1)建立文件 2)打开文件 3)关闭文件 4)删除文件 5)建立目录 6)显示目录内容2.设计思路:以一个真实的文件来模拟一块磁盘。1)需自行定义的数据结构有:a.目录结构typedef struct char name3; /*文件或目录名*/ char type2; /*文件类型名*/ char attribute; /*属性*/ char address; /*文件或目录的起始盘块号*/ char length; /*文件长度,以盘块为单位*/content; /*目录结构*/b.已打开文件表的读写指针结构typedef struct int dnum; /*磁盘盘块号*/ int bnum; /*盘块内第几项*/pointer; /*已打开文件表中读写指针的结构*/c.已打开文件表表项结构定义typedef struct char name20; /*文件绝对路径名*/ char attribute;/*文件的属性,用1个字节表示,所以用了char类型*/ int number; /*文件起始盘块号*/ int length; /*文件长度,文件占用的字节数*/ int flag; /*操作类型,用0表示以读操作方式开文件,用1表示写操作方式打开文件*/ pointer read; /*读文件的位置,文件刚打开时dnum为文件起始盘块号,bnum为0*/ pointer write; /*写文件的位置,文件建立时dnum为文件起始盘块号,bnum为0,打开时为文件末尾*/OFILE; /*已打开文件表项类型定义*/d.已打开文件表定义struct OFILE filen; /*已打开文件表*/ int length; /*已打开文件表中登记的文件数量*/openfile; /*已打开文件表定义*/char buffer164;/*模拟缓冲1*/ /模拟磁盘上的物理块中存放的具体数据content buffer28;/*模拟缓冲2*/ /模拟磁盘上的物理块中存放的目录FILE *fc; /*模拟磁盘的文件指针*/2)需要设计的函数:a. sopen(char *name) 在已打开文件表中查找文件nameb. dopen(char *name) 在已打开文件表中删除文件namec. iopen(content *x) 在已打开文件表openfile数组中插入文件named. allocate( ) 分配一个磁盘块,返回块号。从FAT中依次查找,找到一个空闲的磁盘区,返回它的编号e. search(char *name,int flag,int *dnum,int *bnum) 查找路径名为name的文件或目录,返回该目录的起始盘块号f. create_file(char *name,int attribute)g. open_file(char *name,int attribute)h. close_file(char *name)i. delete(char *name)j. md(char *name)k. dir(char *name)我来帮他解答2008-1-17 16:29满意回答#include stdio.h #include stdlib.h #include string.h/主文件结构体struct MasterFile char username20; /用户名 char password20; /用户名密码 char flag; /标志 struct MasterFile *next;/用户文件结构体struct UserFile int fnum; /文件编号 char fname20; /文件名 int flength; /文件长度 char flag; /标志 char fpw20; /文件保护码 struct UserFile *link;/全局变量int shoudsave; /存储标记int usingnum; /当前用户标记struct MasterFile MFD20; /主目录struct UserFile UFD2020; /用户目录/寻找主目录空闲区struct MasterFile*MoveMFDToLast() for(int i=0;i20;i+) if(MFDi.flag=0) usingnum=i; return &MFDi; return NULL;/查找用户struct MasterFile*SearchMFD(char str) for(int i=0;i20;i+) if(strcmp(str,MFDi.username)=0) usingnum=i; return &MFDi; return NULL; /寻找用户目录空闲区struct UserFile *MoveUFDToLast() for(int i=0;i20;i+) if(UFDusingnumi.flag=0) return &UFDusingnumi; return NULL;/查找用户文件struct UserFile *SearchUFD(int num) for(int i=0;i20;i+) if(UFDusingnumi.fnum=num) return &UFDusingnumi; return NULL;/删除用户文件目录void LeftMoveUFD(int num) for(int i=0;i20;i+) if(UFDusingnumi.fnum=num) for(int j=i;jusername,str1); strcpy(p-password,str2); p-flag=1; printf(%d,MFDusingnum.flag); p-next=NULL; shoudsave=1; /存储标记 else /旧用户登录 while(1) printf(请输入你的用户名:); /输入用户名 scanf(%s,&str3); p=SearchMFD(str3); if(p=NULL) printf(对不起,你输入的用户名不存在!n); printf(继续(y)还是放弃(n)?); scanf(%s,&flag3); if(flag3=y) continue; else printf(你已退出了系统!n); exit(1); else while(1) printf(请输入口令:); /输入口令 scanf(%s,&str4); if(strcmp(str4,p-password)!=0) printf(对不起,你输入的口令不正确,请重新输入.n); continue; else break; break; /菜单void menu() printf(n*); printf(t1列文件目录ttttt2创建文件n); printf(t3删除文件ttttt4读文件n); printf(t5写文件tttttt0退出系统n); printf(*n); /列文件目录 void Dir() if(MFDusingnum.next=0) printf(目前你不存在任何文件!n); else for(int i=0;ilink=(struct UserFile*)fp; /设置用户目录 MFDusingnum.next=(struct MasterFile*)&UFDusingnum0; strcpy(f-fname,str1); strcpy(f-fpw,str2); f-fnum=num; f-flength=0; f-flag=1; fclose(fp); shoudsave=1; /设置存储标记 printf(文件已创建!n); /删除文件 void Delete() struct UserFile *f; int num; printf(请输入你要删除的文件编号:); scanf(%d,&num); f=SearchUFD(num); /查找用户文件 if(f=NULL) printf(你要删除的文件不存在!n); else LeftMoveUFD(num); /删除用户文件目录 printf(文件已删除!n); shoudsave=1; /设置存储标记 /读文件 void Read() char ch; struct UserFile *f; FILE *fp; int num; printf(请输入你要读的文件的编号:); scanf(%d,&num); f=SearchUFD(num); /查找文件 if(f=NULL) printf(你输入的文件不存在!n); else if(fp=fopen(f-fname,r)=NULL) /打开指定文件 printf(不能打开该文件!n); exit(0); ch=fgetc(fp); /输出文件内容 while(ch!=EOF) putchar(ch); ch=fgetc(fp); printf(n); fclose(fp); /关闭文件 printf(文件已读完毕!n);/写文件 void Write() char ch; struct UserFile *f; FILE *fp; int num; printf(请输入你要写的文件的编号:); scanf(%d,&num); f=SearchUFD(num); /查找文件 if(f=NULL) printf(你输入的文件不存在!n); else if(fp=fopen(f-fname,wr)=NULL) /打开指定文件 printf(不能打开该文件!n); exit(0); printf(请按字符输入内容(以#表示结束符); /写入文件 scanf(%s,&ch); while(ch!=#) fwrite(&ch,1,1,fp); scanf(%s,&ch); fclose(fp); /关闭文件 shoudsave=1; /设置存储标记 printf(文件写入完毕!n);/保存void Save() FILE *fpm,*fpu; int flag=1,count=0; fpm=fopen(F:MasterFile.txt,wb); /打开主文件 if(fpm=NULL) printf(n提示:重新打开主文件信息文件时发生错误!n); exit(1); for(int i=0;i20;i+) fwrite(&MFDi,sizeof(struct MasterFile),1,fpm); /保存主文件目录信息 fclose(fpm); printf(主文件目录信息保存完毕!n); fpu=fopen(F:UserFile.txt,wb); /打开用户文件 if(fpu=NULL) printf(n提示:重新打开用户目录信息文件时发生错误!n); exit(1); for(int j=0;j20;j+) /保存用户文件目录信息 fwrite(&UFDj,sizeof(struct UserFile),20,fpu); fclose(fpu); printf(用户文件目录信息保存完毕!n); /主函数void main() FILE *fpm,*fpu; /文件指针 int sel; char ch; char jian; printf(tttt文件管理系统nttttn); fpm=fopen(F:MasterFile.txt,rb); /打开主文件目录信息文件 if(fpm=NULL) printf(n提示:主文件目录信息文件还不存在,是否创建?(y/n)n); scanf(%s,&jian); if(jian=y|jian=Y) fpm=fopen(F:MasterFile.txt,wb); /创建主文件目录的文件 else exit(0); fpu=fopen(F:UserFile.txt,rb); /打开用户文件目录信息文件 if(fpu=NULL) printf(n提示:用户文件目录信息文件还不存在,是否创建?(y/n)n); scanf(%s,&jian); if(jian=y|jian=Y) fpu=fopen(F:UserFile.txt,wb); /创建用户文件目录的文件 else exit(0); printf(文件正在打开,请稍等.); for(int i=0;i20;i+) /读取主文件目录信息 fread(&MFDi,sizeof(struct MasterFile),1,fpm); /将文件的内容放入接点中 fclose(fpm); / 关闭文件 while(!feof(fpu) /读取用户目录文件信息 for(int i=0;i20;i+) if(fread(&UFDi0,sizeof(struct UserFile),20,fpu) /将文件的内容放入接点中 MFDi.next=(struct MasterFile*)&UFDi0; fclose(fpu); /关闭文件 printf(n文件已导入完毕!n); Login(); /用户登录 while(1) /菜单操作 menu(); printf(请你选择操作:); scanf(%d,&sel); if(sel=0) /保存文件信息 if(shoudsave=1) getchar(); p

温馨提示

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

评论

0/150

提交评论