二级文件管理课程设计Word文件下载.docx

上传人:b****6 文档编号:17722661 上传时间:2022-12-08 格式:DOCX 页数:26 大小:23.60KB
下载 相关 举报
二级文件管理课程设计Word文件下载.docx_第1页
第1页 / 共26页
二级文件管理课程设计Word文件下载.docx_第2页
第2页 / 共26页
二级文件管理课程设计Word文件下载.docx_第3页
第3页 / 共26页
二级文件管理课程设计Word文件下载.docx_第4页
第4页 / 共26页
二级文件管理课程设计Word文件下载.docx_第5页
第5页 / 共26页
点击查看更多>>
下载资源
资源描述

二级文件管理课程设计Word文件下载.docx

《二级文件管理课程设计Word文件下载.docx》由会员分享,可在线阅读,更多相关《二级文件管理课程设计Word文件下载.docx(26页珍藏版)》请在冰豆网上搜索。

二级文件管理课程设计Word文件下载.docx

#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].pro

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1