ImageVerifierCode 换一换
格式:DOCX , 页数:29 ,大小:23.33KB ,
资源ID:1522766      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-1522766.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(简单文件资料系统的实现实验报告材料Word格式文档下载.docx)为本站会员(b****1)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

简单文件资料系统的实现实验报告材料Word格式文档下载.docx

1、my_exitsys:用于退出文件系统。三、程序的设计细想和框图1打开文件函数fopen() (1)格式:FILE *fopen(const char *filename,const char *mode) (2)功能:按照指定打开方式打开指定文件。(3)输入参数说明:filename:待打开的文件名,如果不存在就创建该文件。mode: 文件打开方式,常用的有:r:为读而打开文本文件(不存在则出错)。w为写而打开文本文件(若不存在则创建该文件;反之,则从文件起始位置写,原内容将被覆盖)。a为在文件末尾添加数据而打开文本文件。(若不存在则创建该文件;反之,在原文件末尾追加)。r+为读和写而打开文

2、本文件。(读时,从头开始;在写数据时,新数据只覆盖所占的空间,其后不变) 。w+首先建立一个新文件,进行写操作,随后可以从头开始读。(若文件存在,原内容将全部消失) 。a+功能与相同;只是在文件末尾添加新的数据后,可以从头开始读。另外,上述模式字符串中都可以加一个“b”字符,如rb、wb、ab、rb+、wb+、ab+等组合,字符“b”表示fopen() 函数打开的文件为二进制文件,而非纯文字文件。(4)输出:一个指向FILE类型的指针。2关闭文件函数fclose()int fclose(FILE * stream);用来关闭先前fopen()打开的一个文件。此动作会让缓冲区内的数据写入文件中,

3、并释放系统所提供的文件资源。 stream:指向要关闭文件的指针,它是先前执行fopen()函数的返回值。若关闭文件成功则返回0;有错误发生时则返回EOF并把错误代码存到errno。3读文件函数fread()size_t fread( void *buffer, size_t size, size_t count, FILE *stream );读二进制文件到内存。 buffer:用于存放输入数据的缓冲区的首地址;使用fopen()打开的文件的指针,用于指示要读取的文件; size: 每个数据块的字节数; count: 要读入的数据块的个数; size*count:表示要求读取的字节数。实际读

4、取的数据块的个数。4写文件函数fwrite() size_t fwite(const void *buffer,size_t size,size_t count,FILE *stream);将数据写到二进制文件中。buffer:用于存放输出数据的缓冲区的首地址;使用fopen()打开的文件的指针,用于指示要写出的文件; size: count: 要写出的数据块的个数;表示要求写出的字符数。实际写出的数据块的个数。5判断文件结束函数feof ()int feof(FILE * stream)用来判断是否已读取到文件末尾。stream:使用fopen()打开的文件的指针,用于指示要判断的文件。如果

5、已读到文件尾则返回非零值,其他情况返回0。6 主要函数功能实现:int format(); / 格式化磁盘int mkdir(char *sonfname); / 创建子目录int rmdir(char *sonfname); / 删除子目录int create(char *name); / 创建文件int listshow();/ 显示子文件信息int delfile(char *name); /删除文件int changePath(char *sonfname);/ 更改当前路径int write(char *name); / 写入文件int exit();/退出系统int open(ch

6、ar *file);/打开文件int close(char *file);/ 关闭文件int read(char *file);/读取文件7 主要的框架四、程序实现和程序调试遇到的问题的分析1 对于DOS的文件操作使用不熟悉,经常输入错误命令2调试的时候跟踪变量的时候,难以锁定实际的变量是什么3 对于文件的存储结构不熟悉,在构造FAT的时候不知如何解决,查阅了大量的资料和跟老师交流才慢慢开始理解4由于买的实验册对于文件的介绍过于简单,导致理解上出现很大的困难。五、结果分析和总结1基本上实现了DOS下简单文件系统的实现,通过学习基本掌握了文件系统的存储结构2当遇到困难的时候通过认真思考很查阅资料

7、很大问题都是可以自己解决的。通过这次实验锻炼了自己的动手的能力和分析问题的能力3在构造函数的时候可以开阔思维同时加深自己对文件系统实现的理解4通过这样的实验开始对DOS的环境文件命令输入有了初步的理解5通过跟老师的讨论解决自己心中的疑惑六、程序#include memory.hstringiostreamusing namespace std;#define GENERAL 1/1代表普通文件2代表目录文件0表示空文件#define DIRECTORY 2#define Zero 0struct FCB char fname16; /文件名 char type; / 0空文件 1目录文件 2空

8、文件 int size; /文件大小 int fatherBlockNum; /当前的父目录盘块号 int currentBlockNum; /当前的盘块 void initialize() strcpy(fname,0); type = Zero; size =0; fatherBlockNum = currentBlockNum = 0; ;const char* FilePath = C:myfiles;/*常量设置*/const int BlockSize = 512; /盘块大小const int OPEN_MAX = 5; /能打开最多的文件数const int BlockCoun

9、t = 128; /盘块数const int DiskSize = BlockSize * BlockCount; /磁盘大小const int BlockFcbCount = BlockSize/sizeof(FCB);/目录文件的最多FCB数int OpenFileCount = 0; / 统计当前打开文件数目 struct OPENLIST /用户文件打开表 int files; /当前打开文件数 FCB fOPEN_MAX; /FCB拷贝 OPENLIST() files=0; for(int i=0;iformat();/打开文件列表初始化 delete openlist; open

10、list=new OPENLIST; /*-保存到磁盘上myfiles-*/ fp = fopen(FilePath, fwrite(BaseAddr,sizeof(char),DiskSize,fp); fclose(fp); printf(格式化成功!n return 1;int mkdir(char *sonfname)/*-创建子目录-*/判断是否有重名寻找空白子目录项寻找空白盘块号当前目录下增加该子目录项分配子目录盘块,并且初始化修改fat表 int i,temp,iFAT; struct dirFile *dir; /当前目录的指针 if(current = 2) / 根目录 di

11、r=&(osPoint-root); else dir=(struct dirFile *)(osPoint-data current-3); /*-为了避免该目录下同名文件夹-*/ for(i = 1; if(dir-fcbi.type=DIRECTORY & strcmp(dir-fcbi.fname,sonfname)=0 ) printf(该文件夹下已经有同名的文件夹存在了! return 0;i FAT1i = 0) if(i = BlockCount)磁盘已满! iFAT=i; /*-接下来进行分配-*/FAT1iFAT=osPoint-FAT2iFAT = 2; /2表示分配给下

12、级目录文件 /填写该分派新的盘块的参数 strcpy(dir-fcbtemp.fname,sonfname); dir-fcbtemp.type=DIRECTORY;fcbtemp.fatherBlockNum=current;fcbtemp.currentBlockNum=iFAT; /初始化子目录文件盘块 dir=(struct dirFile*)(osPoint-data iFAT-3); /定位到子目录盘块号init (current,iFAT,sonfname);/iFAT是要分配的块号,这里的current用来指要分配的块的父块号创建子目录成功!int rmdir(char *so

13、nfname)/*-删除当前目录下的文件夹-*/ int i,temp,j;/确保当前目录下有该文件,并记录下该FCB下标 if(current=2) for(i=1;i+) /查找该目录文件fcbi.fname,sonfname)=0) temp=i; if(i=BlockFcbCount)当前目录下不存在该子目录! j = dir-fcbtemp.currentBlockNum; struct dirFile *sonDir; /当前子目录的指针 sonDir=(struct dirFile *)(osPoint-data j - 3);i+) /查找子目录是否为空目录 if(sonDir

14、-fcbi.type!=Zero) 该文件夹为非空文件夹,为确保安全,请清空后再删除! /*开始删除子目录操作*/FAT1j = osPoint-FAT2j=0; /fat清空 char *p=osPoint-dataj-3; /格式化子目录 memset(p,0,BlockSize);fcbtemp.initialize(); /回收子目录占据目录项删除当前目录下的文件夹成功n/*-在当前目录下创建文本文件-*/int create(char *name) int i,iFAT;/temp, int emptyNum = 0,isFound = 0; /空闲目录项个数i+)/查看目录是否已满

15、/为了避免同名的文本文件fcbi.type = Zero & isFound = 0) emptyNum = i; isFound = 1; else if(dir-fcbi.type=GENERAL &fcbi.fname,name)=0 )无法在同一目录下创建同名文件! if(emptyNum = 0)已经达到目录项容纳上限,无法创建新目录!BlockCount;i+)/查找FAT表寻找空白区,用来分配磁盘块号jFAT1i=0) if(i=BlockCount) /*-进入分配阶段-*/分配磁盘块FAT1iFAT = osPoint-FAT2iFAT = 1; /*-接下来进行分配-*/填

16、写该分派新的盘块的参数fcbemptyNum.fname,name);fcbemptyNum.type=GENERAL;fcbemptyNum.fatherBlockNum=current;fcbemptyNum.currentBlockNum=iFAT;fcbemptyNum.size =0; char* p = osPoint-dataiFAT -3; memset(p,4,BlockSize);在当前目录下创建文本文件成功!/*-查询子目录-*/int listshow() int i,DirCount=0,FileCount=0; /搜索当前目录fcbi.type=GENERAL) /查找普通文件 FileCount+;%s 文本文件.n,dir-fcbi.fname);fcbi.type=DIRECTORY) /查找目录文件 DirCount+;%s 文件夹.nn该目录下共有 %d 个文本文件, %d 个文件夹nn,FileCount,DirCount);/*-在当前目录下删除文件-*/int delfile(char *name) /确保当前目录下有该文件,并且记录下它的FCB下标 if(current =

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2