文件管理系统实验报告Word文件下载.docx

上传人:b****2 文档编号:14774688 上传时间:2022-10-24 格式:DOCX 页数:27 大小:66.22KB
下载 相关 举报
文件管理系统实验报告Word文件下载.docx_第1页
第1页 / 共27页
文件管理系统实验报告Word文件下载.docx_第2页
第2页 / 共27页
文件管理系统实验报告Word文件下载.docx_第3页
第3页 / 共27页
文件管理系统实验报告Word文件下载.docx_第4页
第4页 / 共27页
文件管理系统实验报告Word文件下载.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

文件管理系统实验报告Word文件下载.docx

《文件管理系统实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《文件管理系统实验报告Word文件下载.docx(27页珍藏版)》请在冰豆网上搜索。

文件管理系统实验报告Word文件下载.docx

在主文件目录中,每个用户目录都占有一个目录项,其目录项中包含文件名和指向该文件目录文件。

在用户文件目录UFD中,这些文件目录具有相似的结构。

具体测试时可考虑:

设计一个10个用户的文件系统,每次用户可保存10个文件,一次运行用户可以打开5个文件,并需要对文件设置保护措施。

(2)设计并实现Create、Open、Read、Write、Close、Delete等文件命令的算法,用户可通过菜单方式或者API方式实现对自己文件的管理。

设计性实践(D)

1、确定基本数据结构,MFD,UFD.,Userinf,Fileinf,File,以及每个数据结构可以进行的对应操作。

2、确定每个函数的参数、返回对象,并且完成每个函数,没完成一个函数,需要进行一次测试。

3、确定用户菜单,并将用户菜单与对应的函数操作进行关联。

4、完整测试每个功能,找出存在的缺陷,并对用户界面做适当调整。

具体可参见本实验报告的“三、实验环境”和“四、实验设计原理”。

实现性实践(I)

1、完成代码编写,形成.c源文件与.exe可执行文件;

2、进行演示,演示应包含所有功能点,将演示结果截图保存;

完成实验报告说明,具体可参见本实验报告的“五、实验详细实现过程与算法流程”、“六、实验调试”和“七、源程序”。

运行性实践(O)

(1)小组成员确定程序需要完成的功能,并详细列出功能点为后期检查程序是否满足需求做准备。

(2)确定编码人员,由编码人员完成基本编码工作,另一人负责对完成的程序进行测试,检查是否满足所有的功能点。

(3)对不满足的功能点或缺少的功能点进行修改或增加,重复第2步,直至符合要求。

(4)完成上机验收。

具体可参见本实验报告的和“九、实验结果分析”和“十一、实验总结”。

(5)实验目的:

为了模拟文件系统实现的基本功能,了解文件系统的基本结构和文件的各种管理方法,加深理解文件系统的内部功能及内部实现,理解文件管理的工作过程,加深各种文件操作命令的实质内容和执行过程的了解,现要求编程模拟一个简单的文件系统,以实现对文件系统的管理和控制功能,支持用户对自己文件的管理与操作。

二、实验内容:

(6)要求本文件系统采用两级目录,即设置主文件目录[MFD]和用户文件目录[UED]。

三、实验环境:

Windows操作系统、VC++6.0、C语言

(7)实验详细实现过程与算法流程

my_format:

对文件存储器进行格式化,即按照文件系统的结构对虚拟磁盘空间进行布局,并在其上创建根目录以及用于管理文件存储空间等的数据结构。

my_mkdir:

用于创建子目录。

my_rmdir:

用于删除子目录。

my_ls:

用于显示目录中的内容。

my_cd:

用于更改当前目录。

my_create:

用于创建文件。

my_open:

用于打开文件。

my_close:

用于关闭文件。

my_write:

用于写文件。

my_read:

用于读文件。

my_rm:

用于删除文件。

my_exitsys:

用于退出文件系统。

1.打开文件函数fopen()

(1)格式:

FILE*fopen(constchar*filename,constchar*mode)

(2)功能:

按照指定打开方式打开指定文件。

(3)输入参数说明:

filename:

待打开的文件名,如果不存在就创建该文件。

mode:

文件打开方式,常用的有:

"

r"

为读而打开文本文件(不存在则出错)。

w"

为写而打开文本文件(若不存在则创建该文件;

反之,则从文件起始位置写,原内容将被覆盖)。

a"

为在文件末尾添加数据而打开文本文件。

(若不存在则创建该文件;

反之,在原文件末尾追加)。

r+"

为读和写而打开文本文件。

(读时,从头开始;

在写数据时,新数据只覆盖所占的空间,其后不变)。

w+"

首先建立一个新文件,进行写操作,随后可以从头开始读。

(若文件存在,原内容将全部消失)。

a+"

功能与"

相同;

只是在文件末尾添加新的数据后,可以从头开始读。

另外,上述模式字符串中都可以加一个“b”字符,如rb、wb、ab、rb+、wb+、ab+等组合,字符“b”表示fopen()函数打开的文件为二进制文件,而非纯文字文件。

(4)输出:

一个指向FILE类型的指针。

2.关闭文件函数fclose()

intfclose(FILE*stream);

用来关闭先前fopen()打开的一个文件。

此动作会让缓冲区内的数据写入文件中,并释放系统所提供的文件资源。

stream:

指向要关闭文件的指针,它是先前执行fopen()函数的返回值。

若关闭文件成功则返回0;

有错误发生时则返回EOF并把错误代码存到errno。

3.读文件函数fread()

size_tfread(void*buffer,size_tsize,size_tcount,FILE*stream);

读二进制文件到内存。

buffer:

用于存放输入数据的缓冲区的首地址;

使用fopen()打开的文件的指针,用于指示要读取的文件;

size:

每个数据块的字节数;

count:

要读入的数据块的个数;

size*count:

表示要求读取的字节数。

实际读取的数据块的个数。

4.写文件函数fwrite()

size_tfwite(constvoid*buffer,size_tsize,size_tcount,FILE*stream);

将数据写到二进制文件中。

buffer:

用于存放输出数据的缓冲区的首地址;

使用fopen()打开的文件的指针,用于指示要写出的文件;

size:

count:

要写出的数据块的个数;

表示要求写出的字符数。

实际写出的数据块的个数。

5.判断文件结束函数feof()

intfeof(FILE*stream)

用来判断是否已读取到文件末尾。

stream:

使用fopen()打开的文件的指针,用于指示要判断的文件。

如果已读到文件尾则返回非零值,其他情况返回0。

6主要函数功能实现:

intformat();

//格式化磁盘

intmkdir(char*sonfname);

//创建子目录

intrmdir(char*sonfname);

//删除子目录

intcreate(char*name);

//创建文件

intlistshow();

//显示子文件信息

intdelfile(char*name);

//删除文件

intchangePath(char*sonfname);

//更改当前路径

intwrite(char*name);

//写入文件

intexit();

//退出系统

intopen(char*file);

//打开文件

intclose(char*file);

//关闭文件

intread(char*file);

//读取文件

五、源程序:

#include<

stdio.h>

memory.h>

string>

iostream>

usingnamespacestd;

#defineGENERAL1//1代表普通文件2代表目录文件0表示空文件

#defineDIRECTORY2

#defineZero0

structFCB

{

charfname[16];

//文件名

chartype;

//0空文件1目录文件2空文件

intsize;

//文件大小

intfatherBlockNum;

//当前的父目录盘块号

intcurrentBlockNum;

//当前的盘块

voidinitialize()

{

strcpy(fname,"

\0"

);

type=Zero;

size=0;

fatherBlockNum=currentBlockNum=0;

}

};

constchar*FilePath="

C:

\\myfiles"

;

/*常量设置*/

constintBlockSize=512;

//盘块大小

constintOPEN_MAX=5;

//能打开最多的文件数

constintBlockCount=128;

//盘块数

constintDiskSize=BlockSize*BlockCount;

//磁盘大小

constintBlockFcbCount=BlockSize/sizeof(FCB);

//目录文件的最多FCB数

intOpenFileCount=0;

//统计当前打开文件数目

structOPENLIST//用户文件打开表

intfiles;

//当前打开文件数

FCBf[OPEN_MAX];

//FCB拷贝

OPENLIST()

files=0;

for(inti=0;

i<

OPEN_MAX;

i++){

f[i].fatherBlockNum=-1;

//为分配打开

f[i].type=GENERAL;

}

structdirFile/*-------------目录文件结构---------------*/

structFCBfcb[BlockFcbCount];

voidinit(int_FatherBlockNum,int_CurrentBlockNum,char*name)//父块号,当前块号,目录名

strcpy(fcb[0].fname,name);

//本身的FCB

fcb[0].fatherBlockNum=_FatherBlockNum;

fcb[0].currentBlockNum=_CurrentBlockNum;

fcb[0].type=DIRECTORY;

//标记目录文件

for(inti=1;

BlockFcbCount;

fcb[i].fa

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 教学研究 > 教学计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1