资源简介

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


评论

共有 条评论