资源简介
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++
- libstdc++.so.6.0.10 64位机
- 简易防火墙VC++
- 应届毕业生C++个人简历
- c++ 本地机子流量统计
- 水电煤气管理系统C++实现
- 飞翔的小鸟源代码c++下编写
- 3阶魔方通用算法带图形界面vc++,核心
- 双端队列C++实现 双端队列C++实现
- 求众数的两种方法
- 图像配准C++代码
- VC++MFC制作的画图工具
- C++ 三子棋代码
- C++ 创建读写PDF
- ISM C语言精简版
- 图书管理系统c++版
- c++课程设计论文-三子连珠游戏
- VC++课程设计一 福彩游戏(代码和报告
- C++读取磁盘扇区数据
- 基于Qt的学生报账系统
- VC++ 录音并生成wav文件
- VC++6.0_MFC基于对话框简单计算器设计
- C++程序基础课程设计——求取平均分
- fp增长树算法的C/C++实现
- 电子邮件收发程序c++版
- mfc c++版网络爬虫
- 跨平台的C++日志库
- RSA加密字符串 C++ Builder 6.0
- 数据结构课程设计c++排序算法的比较
- 数据结构课程设计c++图书管理系统源
评论
共有 条评论