资源简介
设计一个简单的磁盘文件管理系统,用文件模拟磁盘,用数组模拟缓冲区,要求实现:
(1)支持多级目录结构,支持文件的绝对路径访问;
(2)文件的逻辑结构采用流式(字节流)结构,物理结构采用链式结构中的显式链方式;
(3)磁盘管理采用文件分配表;
(4)实现文件操作命令:创建目录、列表目录、删除空目录、创建文件、删除文件、显示文件内容、打开文件、读文件、写文件(追加方式)、关闭文件、改变文件属性;
(5)通过主函数对所实现的功能进行测试。

代码片段和文件信息
#include
#include
#include
#define Block_number 128
#define Block_size 64
//目录和文件的结构定义
typedef struct node
{
char name[50]; //目录或文件的名字
int type; //0代表目录,1代表普通文件
char state;//目录状态,$表示空目录~表示非空
int file_state;//文件状态,1表示open,0表示close
int file_size; //文件的大小
int strat_number;//文件起始盘快号
char property[5];//r-表示只读,rw表示读写
char content[Block_number * Block_size];//文件的内容
char extension[10];//文件扩展名
struct node *next; //指向下一个兄弟结点的指针
struct node *sub; //指向第一个子结点的指针
struct node *father; //指向父结点的指针
}dirNode;
//文件分配表结构定义
typedef struct Node
{
char name[50];//文件名
int start_number;//起始快号
int next_number;//文件存放位置的下一个块号
int number;//所在块号
int length;//长度
int state;//盘块记录,0表示可用,1表示占用,-1表示文件结束,其他值表示故障块
struct Node *next;
}*FAT;
//定义字符串结构
typedef struct
{
char data[100];
}string;
//记录已打开或建立的文件信息结构
typedef struct table
{
char path[100];//路径信息
char property[5];//r-表示只读,rw表示读写
int start_number;//起始块号
int length;//文件长度
char type;//o表示打开,c表示关闭
struct table *next;
}*Table;
dirNode *work;//工作目录
dirNode *root;//根目录
Table Info_t;//已打开或建立的文件信息表
FAT fat;//文件分配表带头结点
char path[100];//记录路径
int Is_copy = 0;//表示是否是复制指令,1是
int size = 0;//复制命令时的文件大小
//函数申明
void InitFAT();//初始化文件分配表
void InitDir();//初始化目录
void InitInfo_t();//初始化文件信息表
int Create_File(char way[]);//创建文件
void Open_File(char way[]);//打开文件
void Close_File(char way[]);//关闭文件
void Read_File(char way[]);//读文件
void Write_File(char way[]);//写文件
void Delete_File(char way[]);//删除文件
void Show_Content_File(char way[]);//显示文件内容
void Copy_File(char way1[]char way2[]);//复制文件
void Change_Property_File(char way[]);//改变文件属性
void Make_Dir(char way[]);//创建目录
void Show_Dir();//显示所有目录
void Delete_Dir(char way[]);//删除目录
void Change_Dir(char way[]);//改变工作目录
dirNode *Search(char way[]);//查找路径
int order(char command[]);//命令解析
void Help();//帮助函数
//初始化文件分配表
void InitFAT()
{
int i;
FAT filetabletemp;
fat = (FAT)malloc(sizeof(Node));
temp = fat;
for(i = 0;i < Block_number;i ++)
{
filetable = (FAT)malloc(sizeof(Node));
filetable->state = 0;
filetable->number = i;
filetable->next_number = -1;
filetable->start_number = -1;
filetable->length = -1;
strcpy(filetable->name““);
filetable->next = NULL;
temp->next = filetable;
temp = temp->next;
}
}
//初始化目录
void InitDir()
{
root = (dirNode*)malloc(sizeof(node));
strcpy(root->name“root“);
root->type = 0;
root->file_state = -1;
root->father = NULL;
root->next = NULL;
root->sub = NULL;
root->state = ‘$‘;
work = root;
strcpy(path“root“);
}
//初始化文件信息表
void InitInfo_t()
{
Info_t = (Table)malloc(sizeof(table));
Info_t->length = -1;
strcpy(Info_t->path““);
strcpy(Info_t->property““);
Info_t->start_number = -1;
Info_t->type = ‘c‘;
Info_t->next = NULL;
}
//创建文件
int Create_File(char way[])
{
int i = 0j = 0;
int file_size;//文件大小
int number;//文件所要的块数
char temp[Block_number * B
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2014-04-07 20:07 OS_Test3\
目录 0 2014-04-07 20:07 OS_Test3\Debug\
文件 200813 2013-06-26 20:59 OS_Test3\Debug\OS_Test3.exe
文件 202864 2013-06-26 20:59 OS_Test3\Debug\OS_Test3.ilk
文件 226524 2013-06-26 20:59 OS_Test3\Debug\OS_Test3.pch
文件 386048 2013-06-26 20:59 OS_Test3\Debug\OS_Test3.pdb
文件 48542 2013-06-26 20:59 OS_Test3\Debug\main.obj
文件 33792 2014-02-23 22:48 OS_Test3\Debug\vc60.idb
文件 45056 2013-06-26 20:59 OS_Test3\Debug\vc60.pdb
文件 4304 2013-06-09 14:12 OS_Test3\OS_Test3.dsp
文件 541 2013-06-09 14:11 OS_Test3\OS_Test3.dsw
文件 58368 2014-02-23 22:49 OS_Test3\OS_Test3.ncb
文件 53760 2014-02-23 22:49 OS_Test3\OS_Test3.opt
文件 895 2013-06-26 20:59 OS_Test3\OS_Test3.plg
文件 24781 2013-06-23 14:33 OS_Test3\main.cpp
相关资源
- 模拟QQ登陆界面,按钮无效自己写
- 交通咨询模拟系统完整代码
- 卡西欧工程计算器模拟器Casio FX
- S7-200模拟量编程实例
- 波浪模拟UDF程序
- 51模拟SPI读写SD卡(包括Fat和Fat32文件
- 分页系统模拟实验 操作系统 课程设
- 课程作业:模拟仓库管理系统
- 模拟段页式虚拟存储管理中地址转换
- STM32F103 CC2500完整驱动(模拟SPI)
- 报文模拟仿真测试工具2.0
- 模拟ATM柜员机系统--连接数据库
- HOOK 记录和模拟 Keyboard Mouse
- 模拟首次适应动态分区存储管理方案
- 磁盘调度算法的模拟实现及对比
- 模拟一个文件管理系统
- 电梯模拟程序C/C 算法实现
- 计算机网络课程设计—ARQ协议模拟实
- 模拟电路课程设计(音频放大电路设
- Diskhook(模拟硬盘序列号)
- 模拟电路设计找工作面试笔试集萃
- DE2模拟的交通红绿灯
- OpenGL-3D坦克模拟
- Yy-z02计算机组成原理实验仪软件 V1.
- FLAC3D数值模拟的边坡稳定性
- 非晶材料微型齿轮成形过程数值模拟
- 再生顶板下巷道布置及支护离散元模
- 基于ABAQUS的TC4钛合金电阻热热处理温
- 块体单元法中喷锚支护的数值模拟
- 收藏奉献_DOS汉字系统08:WPS 2.3 + CXD
评论
共有 条评论