tname[k]=' ';
if((d=search(pathname,8,&dn,&bn))==false)/*找到目录路径,返回该{ }
/*确认该目录不存在的同时查找空目录项*/
printf(\目录不存在,不能建立\return(false);
目录所在块号dn和项数bn*/
b=-1; fseek(fc,d*64L,SEEK_SET);
fread(buffer2,64L,1,fc); /*读出dnum盘块的内容*/ for(t=0;t<8;t++) {
//P177
if(buffer2[t].name[0]==dname[0]&&buffer2[t].name[1]==dname[1]&&bu
{/*找到名字dname的文件,建立失败*/ }
if(buffer2[t].name[0]=='$'&&b==-1)
b=t;
printf(\文件已经存在,不能建立\\n\return(false);
ffer2[t].name[2]==dname[2]
&&buffer2[t].type[0]==tname[0]&&buffer2[t].type[1]==tname[1])
}/*for*/
if(b==-1)/*没有空目录项,建立失败*/ { }
if((dd=allocate( ))==false)/*分配给建立目录的磁盘盘块dd*/ {
printf(\建立文件失败\\n\return(false);
printf(\目录无空间\\n\return(false);
}
/*填写目录项*/ for(i=0;i<3;i++)
buffer2[b].name[i]=dname[i]; buffer2[b].type[i]=tname[i]; for(i=0;i<2;i++)
buffer2[b].attribute=attribute; buffer2[b].address=dd; buffer2[b].length=0; fseek(fc,d*64L,SEEK_SET); fwrite(buffer2,64L,1,fc); /*填写已打开文件表*/ strcpy(x.name,name); x.attribute=attribute; x.number=dd; x.length=0; x.flag=1;
x.read.dnum=x.write.dnum=dd; x.read.bnum=x.write.bnum=0; //iopen(&x);
}/*建立文件结束*/
int open_file(char *name,int attribute) /*打开文件函数*/ //char *name; //int attribute; {
OFILE x;
int dnum,bnum,last,i,d;
if((d=search(name,4,&dnum,&bnum))==false) { }
printf(\文件不存在,打开操作失败\\n\return(false);
}
fseek(fc,dnum*64L,SEEK_SET);/*fread(buffer2,64,1,fc);
读出对应目录项*/
//P178
if((buffer2[bnum].attribute%2==1)&& attribute==1)/*对只读文件要求{ }
strcpy(x.name,name);
x.attribute=buffer2[bnum].attribute; x.number=buffer2[bnum].address;
x.read.dnum=x.write.dnum=buffer2[bnum].address; x.read.bnum=x.write.bnum=0; x.flag=attribute; if(attribute==1) { }
iopen(&x);/*填写已打开文件表*/
while(d!='\\xff')/*寻找文件末尾*/ {
fseek(fc, d/64*64L, SEEK_SET);
fread(buffer1,64L,1,fc);/*读出dnum项所在FAT*/ last=d;
d=buffer1[dd];/*读出dnum块下一块内容赋给dnum*/ printf(\文件不能写,打开失败\return(false);
写*/
}/*while*/
x.write.dnum=last;/*填写写指针*/ fseek(fc, last*64L, SEEK_SET); fread(buffer1,64L,1,fc);
for(i=0;i<64&&buffer1[i]!='#';i++); x.write.bnum=i;
x.length=(buffer2[bnum].length-1)*64+i;
int close_file(char *name)
/*关闭文件函数*/ //char *name; { }
int Delete(char *name) /*删除文件*/ //char *name;
int i,dnum,bnum; if((i=sopen(name))==-1) { }
if(openfile.file[i].flag==1)/*写文件的追加文件结束符*/ { }
/*在已打开文件表中删除该文件的登记项*/
fseek(fc,openfile.file[i].write.dnum*64L, SEEK_SET); fread(buffer1,64,1,fc);
buffer1[openfile.file[i].write.bnum]='#';
fseek(fc,openfile.file[i].write.dnum*64L, SEEK_SET); fwrite(buffer1,64,1,fc); fputc('#',fc);
search(name,4,&dnum,&bnum);/*查找该文件目录位置*/ /*修改目录中的文件长度*/ fseek(fc,dnum*64L, SEEK_SET); fread(buffer2,64,1,fc);
buffer2[bnum].length=openfile.file[i].length/64+1; fseek(fc, dnum*64L, SEEK_SET); fwrite(buffer2,64,1,fc);
printf(\打开的文件中没有该文件,关闭失败\\n\return(false);
if(openfile.length>1)
copen(&openfile.file[i],&openfile.file[openfile.length-1]);
//P179
openfile.length--;
{
int md(char *name)
/*建立目录函数,目录路径名name*/ //char *name; {
int i,j,k,s,d,t,b,dd,dn,bn; int dnum,bnum,t;
if((t=search(name,4,&dnum,&bnum))==false) { }
if(sopen(name)!=-1) { }
fseek(fc,dnum*64L, SEEK_SET); fread(buffer2,64,1,fc);
buffer2[bnum].name[0]='$';/*将该文件的目录置成空目录*/ fseek(fc,dnum*64L, SEEK_SET); fwrite(buffer2,64,1,fc);
while(t!='\\xff')/*通过FAT查找每一个盘块号,并依次删除*/ { }
dnum=t;
fseek(fc, dnum/64*64, SEEK_SET); fread(buffer1,64,1,fc); t=buffer1[dnumd]; buffer1[dnumd]=0;
fseek(fc, dnum/64*64L, SEEK_SET); fwrite(buffer1,64,1,fc);
printf(\该文件打开,不能删除\\n\return(false);
printf(\文件不存在\\n\return(false);
}/*文件删除结束*/