基于Windows的二级文件系统开发
使用前请务必仔细阅读下面的说明文档 一、 实验目标 设计二级文件系统,同时实现基本的功能,例如用户登陆、列举文件目录、创建/删除文件、创建/删除子目录等。 二、 系统的相关说明及使用注意事项 (1) 本系统是模仿FAT16文件系统开发的,以16位表示一个簇,并在此基础上做了相应的修改。在这个开发文档中并不会介绍FAT16系统(除非必要),只会详细描述此系统的特点及不同之处。如果要了解本系统的内部组织结构,请先查看关于FAT16文件系统的相关资料。 (2) 本系统主要包括两部分:文件系统低层本身逻辑存储结构的设计,文件系统基于Windows平台存储管理外壳的设计。需注意的是,目标不是软件本身而是静态的磁盘空间(以一定的规则储存数据),Windows界面的管理外壳只是提供一个可视化的平台,从而方便用户管理。 (3) 磁盘中一个扇区有512字节,每个簇由1/4/8/16个扇区组成,在本系统中忽略扇区这个概念,定义一个簇为4K(4096字节)。 (4) 文件系统的空间为256MB ( = 2^16 * 4096 B ) (5) 安装本系统的时候会产生一个大小为256 MB的文件,名为“FileSystem”,作为本系统的磁盘空间,所以在安装之前请先检查分区的磁盘的剩余空间是否大于256MB。所有对于本系统的测试都是在“FileSystem”中进行,不会设计此外的任何文件。 (6) 在Windows系统中有分区的概念,在本系统中所有的文件都建立在名为“system”的系统目录下。 (7) 与FAT16一样,每个文件(目录)都有一个文件目录项作为其标识。 (8) 每个文件目录项的长度为32字节。 (9) 每个文件目录下的子文件(包括子目录)的所有目录项所占有的空间不超过一个簇。即不超过MAX_DIR_ITEM_IN_PAGE = 4KB / 32B = 128 个。 (10) 每个文件的大小理论上不受限制,只局限于文件系统的空间大小。 (11) 本系统的用户中没有用户组的区分,即所有的用户都是同等,没有高低、主次之分。所有的文件(目录)都只属于某个用户,其他任何用户都无权打开或进入。 (12) 文件、子目录的名称最长8个字节 (13) 用户名、密码的长度不超过12个字节 (14) 本系统文件的后缀名不超过3个字节,且固定为“txt” (15) 用户信息项(USER_INFO)的长度为32字节 (16) 软件中的“删除目录”功能会删除目标目录下的所有文件,包括所有的子目录和子文件。 (17) 支持多层文件目录及文件,双击某个目录则可以进入该目录,双击文件则可以打开该文件,双击".."则可以退出当前目录 三、 系统的设计 (1) 界面设计 (2) 系统的磁盘存储结构 磁盘空间 SYSTEM_SPACE_NAME = 256 MB ==> 总共65536醋 每簇大小 CLUSTER_SIZE = 4 KB ==> 256 MB / 4 KB * 2B = 128 KB ==> FAT 的空间为 128 KB(即32簇) 第0簇中存放根目录项及用户表。 第1 ~ 32 簇中存放FAT。 第33 ~ 65534 簇用于存储文件及目录项。 第65535簇,空闲不使用,作为尾簇标记。 (3) 文件系统的逻辑结构 <1> 定义文件目录项结构 typedef struct { BYTE szFileName[8] ; // 文件名 BYTE szFileExt[3] ; // 扩展名 BYTE bAttribute ; // 0:只读,1:可写, 2:目录 unsigned short nStartClu ; // 起始簇 UINT nFileSize ; // 文件大小(字节) BYTE szUserName[12] ; // 所属用户 BYTE bReserve[2] ; // 保留 } _DIRECTORY_ITEM ; typedef _DIRECTORY_ITEM DIRECTORY_ITEM ; typedef _DIRECTORY_ITEM* PDIRECTORY_ITEM ; <2> 定义用户信息结构 typedef struct { BYTE szUserName[12] ; // 用户名 BYTE szUserPwd[12] ; // 密码 BYTE bReserve[8] ; // 保留 } _USER_INFO ; typedef _USER_INFO USER_INFO ; typedef _USER_INFO* PUSER_INFO ; (4) 功能模块划分 <1> . 安装文件系统 <2> . 卸载文件系统 <3> . 初始化文件系统 <4> . 取得用户信息(可用于枚举用户信息) <5> . 检测用户是否存在 <6> . 检测登陆信息是否合法 <7> . 添加用户 <8> . 删除指定的用户 <9> . 检测当前登陆用户的权限 <10>. 枚举指定目录 <11>. 检测在指定目录下的文件是否存在 <12>. 创建新文件 <13>. 删除指定文件 <14>. 读取指定文件的内容 <15>. 创建子目录 <16>. 删除子目录 <17>. 低级格式化 <18>. 高级格式化 (5)面向对象设计 <1>. Info.h 定义本系统的全局信息和存储结构 <2>. CSystem 实现本系统所有功能的核心模块 <3>. CFATManger FAT管理模块 <4>. CDirManger 文件目录项管理模块 <5>. CAddDirDlg 添加目录模块 <6>. CAddUserDlg 添加用户模块 <7>. CFileDlg 添加文件和显示文件模块 <8>. CLogDlg 用户登陆模块 <9>. CShowUserDlg 显示用户列表 <10>. CFileSystemDlg 软件界面实现 四、总结 本次开发流程:1天总体设计,3天详细设计(包含局部测试),1天的总体测试与文档)。总体还算顺利,由于时间比较紧,前期准备不够充足,使得在开发的时候遇到一些困难。对于面向对象的设计,又多了份感觉。看着二千多行的代码在手指下渐渐诞生,感觉不错!! |
此帖于 2006-07-18 11:29:46 被 北极星2003 最后编辑
|