资源简介
c++实现的文件系统 可以输入指令创建文件删除文件新建文件等
树形结构 采用位示图等 可查看占用磁盘情况 当然这些都是模拟的
当时做的大型实验 带实验报告
代码片段和文件信息
#include
#include
#include
using namespace std;
#define MAX 1024
/*
*
* Designed by wankaiming
*
*/
struct fat
{
int next; //下一个物理块的地址
int use; //位示图 0 为空,1 不空
};
struct fcb
{
int first; //第一个物理块
int last; //最后一个物理块
int num; //物理块数
};
struct file //userFileDirectory 这里文件和文件夹均以这种类型来处理
{
char name[20]; //文件或文件夹名
fcb *fcb;
struct file * brother; //文件的链表
struct file * parent; //父目录链表
struct file * child; //子目录链表
int kind; //0文件夹;1文件
};
//----------------------------------------------------相关全局变量------------------------------------------//
fat fat[MAX]; // 假设物理块有1024个;
file * cur;//指向当前目录的指针
int rest=MAX; //全局变量记录剩余多少物理块
//----------------------------------------------------相关全局变量------------------------------------------//
/*申请物理块成功返回第一个物理块的位置,返回-1时,表示申请物理块不成功*/
void distribute_block(file * u)
{
if(u->fcb->num<=rest) //判断文件控制块中文件目录需要的物理块是不是比剩下的物理块多
{
int ij=0t=0;
for(i=0;ifcb->num;i++) //i不超出总物理块数,j小于需要的物理块数
{
if(fat[i].use==0) //根据位示图 use==0说明此处为空
{
j++;
if(j==1) //分配第一个空物理块
u->fcb->first=i;
else //形成链表,可以根据fcb找到下一个物理块
fat[t].next=i;
fat[i].use=1; //分配一块后置1表示位示图此处不为空
rest--; //剩余的空闲物理块数要减1
t=i;
}
}
fat[i-1].next=0; //作为文件使用的最后一个物理块的标识
u->fcb->last=i-1; //将信息记录到该文件fcb中
}
else
{
u->fcb->first=-1; //表示没有分配物理块
cout<<“内存空间不足“;
}
}
/*初始化根目录*/
void init(){
file *u;
u=new file;
u->fcb=new fcb;
u->kind=1;
strcpy(u->name“root“);
u->parent=NULL;
u->brother=NULL;
u->child=NULL;
cur=u;
}
/*显示fat表*/
void showfat()
{
int i;
for(i=0;i<100;i++)
{
cout< if(i%10==9) cout< else cout<<‘ ‘;
}
}
/*找到最后一个文件*/
file* getLast(file* father)
{
file *p=father->child;
while(p->brother!=NULL){
p=p->brother;
}
return p;
}
/*打印目录下的内容*/
void dir()
{
file *p=cur->child;
cout<<“当前文件夹下的内容如下“< if(p!=NULL){
while(p!=NULL){
cout<<“文件名:“<name<<‘ ‘<<“文件属性:“<kind< p=p->brother;
}
}
else{
cout<<“当前目录为空目录“< }
}
/*创建文件*/
void createfile()
{
file *u*t;
u=new file;
u->fcb=new fcb;
u->kind=1;
cout<<“请输入名字“< cin>>u->name;
cout<<“请输入需要的物理块数“< cin>>u->fcb->num;
distribute_block(u);
if(u->fcb->first!=-1)
{
if(cur->child==NULL) //当前目录没有子内容直接将该文件目录添加到链表中
cur->child=u;
else //当前目录有子内容,则将新产生的文件加入链表
{
t=getLast(cur);
t->brother=u;
}
u->brother=NULL;
u->parent=cur;
u->child=NULL;
}
else
{
delete u; //first==-1表示因内存不足,无法创建目录
}
}
/*创建目录*/
void createdir(){
file *u*t;
u=new file;
u->fcb=new fcb;
u->kind=0;
cout<<“请输入名字“< cin>>u->name;
if(cur->child==NULL)
cur->child=u;
else
{
t=getLast(cur);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 117248 2012-06-15 12:04 实验报告byWanKaiming.doc
文件 8796 2012-06-15 12:33 1.cpp
----------- --------- ---------- ----- ----
126044 2
- 上一篇:实现集合交并差运算c++
- 下一篇:Redis数据库32位
相关资源
- C++获取计算机的CPU ID,硬盘序列号等
- C++头文件转delphi工具 + 源码
- 国际象棋的qt源代码
- C++中头文件与源文件的作用详解
- C++多线程网络编程Socket
- VC++ 多线程文件读写操作
- 利用C++哈希表的方法实现电话号码查
- 移木块游戏,可以自编自玩,vc6.0编写
- C++纯文字DOS超小RPG游戏
- VC++MFC小游戏实例教程(实例)+MFC类库
- 连铸温度场计算程序(C++)
- 6自由度机器人运动学正反解C++程序
- Em算法(使用C++编写)
- libstdc++-4.4.7-4.el6.i686.rpm
- VC++实现CMD命令执行与获得返回信息
- 白话C++(全)
- C++标准库第1、2
- 大数类c++大数类
- C++语言编写串口调试助手
- c++素数筛选法
- C++ mqtt 用法
- 商品库存管理系统 C++ MFC
- c++ 多功能计算器
- C++17 In Detail
- 嵌入式QtC++编程课件
- 基于STM32F407ZG的监控摄像头及FATFS文件
- 颜色识别形状识别STM103嵌入式代码
- c++ 邮件多附件群发
- c++ 透明代理(hookproxy)
- mfc 调用redis
川公网安备 51152502000135号
评论
共有 条评论