基于Windows的二级文件系统开发

转载 2013年12月04日 23:47:16

基于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)  界面设计
 http://bbs.pediy.com/upload/2006/41/image/3.gif_797.gif

(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天的总体测试与文档)。总体还算顺利,由于时间比较紧,前期准备不够充足,使得在开发的时候遇到一些困难。对于面向对象的设计,又多了份感觉。看着二千多行的代码在手指下渐渐诞生,感觉不错!! 
上传的附件
文件类型: rar filesystem.rar (0, 726 次下载)
 
此帖于 2006-07-18 11:29:46 被 北极星2003 最后编辑

操作系统课程设计之二级文件系统演示

操作系统课程设计之二级文件系统演示,纯手工编写,思维不算严谨,但对于课设而言,应该是够了,希望对大家有所帮助,也希望读者能给些意见,谢谢!!!...
  • huangqiang1363
  • huangqiang1363
  • 2016年01月27日 11:06
  • 3385

嵌套删除多级目录, 删除单级目录, 创建多级目录, 复制文件

备一份自己用: /** * 嵌套删除多级目录 * * @param[in] oPath 目录 */ private static void deleteFolder(final ...
  • elf8848
  • elf8848
  • 2014年10月09日 10:28
  • 661

Windows句柄表学习笔记

遍历系统进程有一种方法就是通过解析句柄表来遍历,于是学习了一下Windows句柄表。 句柄表位于EPROCESS结构的+0x0f4 偏移处(win7x86),先来看一下句柄表的结构: kd...
  • zfdyq0
  • zfdyq0
  • 2014年10月17日 23:16
  • 980

C++虚拟二级文件管理系统

#include #include #include #include #include #include #include using namespace std; const int...
  • wxlzmt
  • wxlzmt
  • 2014年10月10日 21:52
  • 803

操作系统: 二级目录文件系统的实现(c/c++语言)

操作系统的一个课程设计,实现一个二级目录文件系统。 用disk.txt模拟磁盘,使用Help查看支持的命令及其操作方式,root为超级用户(写在disk.txt中) 文件的逻辑结构:流式文件。 物...
  • NK_test
  • NK_test
  • 2015年12月23日 19:20
  • 4593

基于RFID技术的预制件管理系统的开发

1.简介                 随着计算机,通讯技术和消费电子产品——正如人们通常所知的3C数码产品——的到来,已经在人们生活的各个领域带来了改变。通过这些3C技术,在将来,信息的传播和获取...
  • zhengzhihust
  • zhengzhihust
  • 2014年03月26日 09:49
  • 4353

ajax实现的二级联动_读取的是json格式数据

jsp页面: ====请选择==== ====请选择==== js代码: /**  * 项目思路:在页面加载的时候初始化第一个选项,   2:当第一个下拉列表发生改变是触动cha...
  • u013730093
  • u013730093
  • 2015年09月14日 22:22
  • 478

nginx配置二级域名访问集群tomcat和nginx windows版安装 启动

1个nginx和2个tomcat,配置D:\tools\nginx\nginx-1.9.3\conf\nginx.conf文件,实现访问http://localhost/bb/test.html,ht...
  • tiantangpw
  • tiantangpw
  • 2015年09月24日 11:45
  • 723

基于squashfs的gluebi文件系统开发

基于squashfs的gluebi文件系统开发,gluebi文件系统,不仅具有squashfs的安全性与高压缩性,而且具有ubi的bad block 管理、wear leveling等优点...
  • dhtzlfx
  • dhtzlfx
  • 2015年06月26日 08:38
  • 1024

jquery实现下拉菜单的二级联动,利用json对象从DB取值显示联动

利用struts2和Ajax实现json对象的传输,然后实现菜单的二级联动 下面是我的 js文件原码: var mail={ //初始化 init:{ //初始化数据 ini...
  • zhouren1314
  • zhouren1314
  • 2014年03月26日 22:40
  • 1951
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于Windows的二级文件系统开发
举报原因:
原因补充:

(最多只允许输入30个字)