二级文件管理课程设计Word格式.docx
- 文档编号:429569
- 上传时间:2023-04-28
- 格式:DOCX
- 页数:30
- 大小:22.31KB
二级文件管理课程设计Word格式.docx
《二级文件管理课程设计Word格式.docx》由会员分享,可在线阅读,更多相关《二级文件管理课程设计Word格式.docx(30页珍藏版)》请在冰点文库上搜索。
#defineROOT_DISK_SIZEsizeof(structDirect)//根目录大小196
#defineLOGIN15
#defineNAME_LONG1
#defineNOT_EXSIT-1
#defineNOT_OPEN-1
#defineDIR_FULL-2
#defineOPEN_FULL-3
#defineALREADY-4
#defineNOT_R_W-4
#defineDISK_FULL-5
#defineNOT_EXIT-1
structFatItem//size8
{intitem;
//存放文件下一个磁盘的指针
charem_disk;
//磁盘块是否空闲标志位,0空闲
};
structDirect
{structFCB
{charname[8];
//文件/目录名8位
charproperty;
//属性1位目录0位普通文件
intsize;
//文件/目录字节数、盘块数)
intfirstDisk;
//文件/目录起始盘块号
intnext;
//子目录起始盘块号
intsign;
//1是根目录0不是根目录
}directItem[MSD+2];
//最大子目录5
};
structOpenTable
{structOpenTableItem
{charname[9];
//文件名
intfirstdisk;
//起始盘块号
//文件的大小
charopen_flag;
//文件打开标志:
'
1'
:
打开。
0'
未打开
}openitem[MOFN];
//最大文件打开数5
intcur_size;
//当前打文件的数目
structFatItem*fat;
//FAT表
structDirect*root;
//根目录
structDirect*cur_dir;
//当前目录
structOpenTableuser_openTable;
//文件打开表
intfd=-1;
//文件打开表的序号
char*bufferdir;
//记录当前路径的名称
char*fdisk;
//虚拟磁盘起始地址
intcur_user;
intfind_N=0;
voidinit();
voidformat();
voidenter();
voidassign();
intcreate(char*name);
intopen(char*name);
intclose(char*name);
intrename();
intwrite(intfd,char*buf,intlen,char*name);
intread(intfd,char*buf,char*name);
intdel(char*name);
voiddir();
intlogin();
voidhelpMenu();
voidcurrentPath();
2、FileSystem.cpp
#include<
stdio.h>
stdlib.h>
#include"
conio.h"
#include"
FileSystem.h"
string.h>
intstatue=0;
charuser[20]="
li"
;
charpassword[20]="
123"
intmain()
{FILE*fp;
charch;
charcmd[13];
charname[10];
inti,flag;
char*contect;
helpMenu();
while((flag=login())!
=LOGIN)
{printf("
密码不正确!
\n"
);
printf("
请输入正确的用户名和密码!
}
contect=(char*)malloc(MAX_WRITE*sizeof(char));
if((fp=fopen("
disk.bat"
"
rb"
))==NULL)//创建一个文件
{
Willyouinitializethedisk?
(yorn)"
scanf("
%s"
&
ch);
if(ch=='
y'
)
{init();
printf("
InitializeSucceed!
\n"
}
else
{return0;
enter();
//分析命令
while
(1)
%s/>
"
bufferdir);
cmd);
if(strcmp(cmd,"
help"
)==0||strcmp(cmd,"
?
)==0)
{helpMenu();
elseif(strcmp(cmd,"
model"
{printf("
需要修改密码么(y/n)"
scanf("
if(ch=='
{printf("
请输入密码\b"
scanf("
password);
printf("
修改成功"
else
{printf("
退出修改密码\n"
}
login"
{while(login()!
请输入正确的用户名或密码\n"
elseif(strcmp(cmd,"
quit"
{free(contect);
exit
(1);
return0;
create"
)==0)
{scanf("
name);
flag=create(name);
//关于创建文件共实现四个判断
if(flag==NAME_LONG)
{//文件名太长
Error:
\n文件的名称太长!
elseif(flag==DIR_FULL)
{//目录下文件数超
\n该目录下的文件和目录数已满!
elseif(flag==ALREADY)
{//重名
\n该目录下已存在该文件!
elseif(flag==DISK_FULL)
{//磁盘空间满
\n磁盘空间已满!
成功创建文件!
open"
)==0)
{statue=1;
fd=open(name);
if(fd==NOT_EXSIT)
\n所要打开的文件不存在!
打开成功!
write"
{statue=2;
if(fd==NOT_OPEN)
{
\n该文件没有打开,请打开后再写入\n"
}
请输入文件的内容:
"
contect);
//connect为一个长度为128字节的变量值
flag=write(fd,contect,strlen(contect),name);
if(flag==0)//每个盘块可写入最多128字节
{
printf("
已成功写入!
}
else
\n硬盘空间不足,无法写入!
read"
{
statue=3;
\n不存在该文件,不能读!
elseif(fd==NOT_OPEN)
该文件已经打开!
flag=read(fd,contect,name);
if(flag==0)
for(i=0;
i<
user_openTable.openitem[fd].size;
i++)
{
printf("
%c"
contect[i]);
}
\t\n"
//if(gets(a)==NULL);
delete"
flag=del(name);
if(flag==NOT_EXIT)
\n该文件没有退出,不能删除!
elseif(flag==-NOT_OPEN)
\n该文件是打开的,请先关闭它,然后再删除!
已成功删除文件!
dir"
dir();
format"
format();
puts("
formatsuccess!
close"
statue=0;
inti;
for(i=0;
MOFN;
i++)
if(!
strcmp(user_openTable.openitem[i].name,name))
break;
if(i>
=MOFN)
\n该文件没有打开,无需关闭!
//清空该文件的用户打开表项
strcpy(user_openTable.openitem[i].name,"
user_openTable.openitem[i].firstdisk=-1;
user_openTable.openitem[i].size=0;
user_openTable.openitem[i].open_flag='
user_openTable.cur_size--;
closesuccess!
continue;
elseif(strcmp(cmd,"
rename"
if(statue>
=1)
打开文件不能重命名"
else{
%d"
statue);
flag=rename();
if(flag==NOT_EXIT)
文件不存在\n"
else{
\n指令错误!
intlogin()
{
charinuser[20];
charinpassword[20];
intj=0;
printf("
请输入用户名\n"
scanf("
inuser);
while((strcmp(inuser,user)!
=0))
该用户不存在!
***************\n"
请输入正确的用户名:
请输入密码\n"
while((ch=getch())!
=13)//将输入的密码转换成字符****
{
putchar('
*'
inpassword[j]=ch;
j++;
inpassword[j]='
\0'
//字符数组的最后一位为'
故要加该语句
//printf("
您输入的密码是:
inpassword);
getchar();
if((strcmp(inuser,user)==0)&
&
(strcmp(inpassword,password)==0))
bufferdir="
wang"
returnLOGIN;
else
return0;
voidinit()
fdisk=(char*)malloc(MEM_D_SIZE*sizeof(char));
//分配空间
voidformat()
inti;
FILE*fp;
fat=(structFatItem*)(fdisk+DISKSIZE);
//FAT1M
/*-----初始化FAT表fat[1]---fat[7]------------*/
for(i=1;
ROOT_DISK_NO-1;
i++)//for(i=1;
8;
fat[i].item=i+1;
fat[i].em_disk='
}
for(i=ROOT_DISK_NO;
DISK_NUM;
i++)//for(8;
1024;
fat[i].item=-1;
//item为-1即表示还没有使用
fat[i].em_disk='
root=(structDirect*)(fdisk+DISKSIZE+FATSIZE);
//根目录的地址1k+8k
root->
directItem[0].sign=1;
directItem[0].firstDisk=ROOT_DISK_NO;
//=9;
//第9个盘块开始
strcpy(root->
directItem[0].name,"
."
//定义其文件名为'
.'
directItem[0].next=root->
directItem[0].firstDisk;
//子目录的起始盘块是根目录所在第一个盘块,即未出
//第一块
directItem[0].property='
//1根目录
directItem[0].size=ROOT_DISK_SIZE;
//即一个根目录项的空间大小196字节
/*指向上一级目录的目录项-----回指指针*/
directItem[1].sign=1;
directItem[1].firstDisk=ROOT_DISK_NO;
directItem[1].name,"
.."
directItem[1].next=root->
directItem[1].property='
directItem[1].size=ROOT_DISK_SIZE;
for(i=2;
MSD+2;
{//子目录最大只有5个表项
root->
directItem[i].sign=0;
directItem[i].firstDisk=-1;
strcpy(root->
directItem[i].name,"
directItem[i].next=-1;
directItem[i].property='
directItem[i].size=0;
if((fp=fopen("
wb"
))==NULL)
\nCan'
tOpenTheFile\n"
return;
//虚拟到物理
if(fwrite(fdisk,MEM_D_SIZE,1,fp)!
=1)
\n文件写入错误!
fclose(fp);
voidenter()
//重新回到初始空间---虚拟中操作
//申请1M空间
//判断disk文件是否存在
if((fp=fopen("
\n打开文件出错!
if(!
fread(fdisk,MEM_D_SIZE,1,fp)){//把磁盘文件disk.dat读入虚拟磁盘空间(内存)
//回到新申请的fdisk中
\n不能读文件!
exit(0);
//最多能打开5个文件
for(i=0;
strcpy(user_openTable.openitem[i].name,"
user_openTable.openitem[i].firstdisk=-1;
user_openTable.openitem[i].size=0;
user_openTable.cur_size=0;
cur_dir=root;
bufferdir=(char*)malloc(DIR_LENGTH*sizeof(char));
strcpy(bufferdir,"
Root:
intcreate(char*name)
inti,j;
//文件名超过8字符
if(strlen(name)>
8)//文件名大于8位
return(NAME_LONG);
//重名check
for(j=2;
j<
j++)
//如果同名则跳出
if(!
strcmp(cur_dir->
directItem[j].name,name)&
cur_dir->
directItem[j].prop
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 二级 文件 管理 课程设计