MAP=(struct map *)(file+(FATNUM+1)*BLOCK_SIZE); //初始化位示图 init(FAT);
FAT->id[0]=9872;
filedir=(struct DIR *)(file+(FATNUM+1+2)*BLOCK_SIZE);
FAT->id[128]=-1; FAT->id[0]=9872-1;
strcpy(filedir->list[0].fname,\strcpy(filedir->list[0].exname,\filedir->list[0].fnum=currentdir; filedir->list[0].length=0;
strcpy(filedir->list[1].fname,\strcpy(filedir->list[1].exname,\filedir->list[1].fnum=currentdir; filedir->list[1].length=0;
fp=fopen(FilePath,\
fwrite(file,sizeof(char),DISK_SIZE,fp); fclose(fp);
printf(\初始化已经完成,现在可以进行操作了!\\n\\n\ } /*
*创建子目录 */
int mkdir(char *str) {
int i,j;
//当前目录指针地址
//将要创建的FAT号
//将要创建的目录块号
int blockdir;
//目录块内编号 struct fatid *flagid;
struct DIR *dir; //当前目录指针 struct map *MAP; struct fatid *FAT; if(strcmp(str,\{ }
dir=(struct DIR *)(file+(currentdir)*BLOCK_SIZE); MAP=(struct map *)(file+(FATNUM+1)*BLOCK_SIZE); FAT=(struct fatid *)(file+BLOCK_SIZE);
for(i=DATABEG+1;i
if(i>BLOCK_NUM) { }
//map 置即已用
MAP->maplist[i]=1;
printf(\内存不足\\n\return 0;
break;
printf(\目录名称不能为空\\n\return 0;
dir=(struct DIR *)(file+(currentdir)*BLOCK_SIZE);
for(i=2;i if(strcmp(dir->list[i].fname,str)==0) { } } } printf(\目录下有同名文件夹\\n\return 0; for(i=2;i if(strcmp(dir->list[i].fname,\ { } printf(\内存不足\\n\return 0; break; //有空的目录块且无重名,第一版本的时 候与上面的循环放在一起,存在一个情况是前面的建立的目录删除后,直接被同名的覆盖了 if(i>LIST_SIZE) flagid=(struct fatid *)(file+BLOCK_SIZE); //fat 首位地址 for(j=DATABEG+1;j } if(flagid->id[j]==0) { } blockdir=j; break; strcpy(dir->list[i].fname,str); dir->list[i].fnum=blockdir; strcpy(dir->list[i].exname,\dir->list[i].length=0; dir=(struct DIR *)(file+blockdir*BLOCK_SIZE); //为新目录项创建根目录 strcpy(dir->list[0].fname,\strcpy(dir->list[0].exname,\dir->list[0].fnum=blockdir; dir->list[0].length=0; strcpy(dir->list[1].fname,\strcpy(dir->list[1].exname,\ } /* dir->list[1].fnum=currentdir; dir->list[1].length=0; flagid->id[j]=-1; //修改FAT 目录尾部 FAT->id[0]=FAT->id[0]-1; printf(\已经成功创建目录%s \\n\return 0; *显示目录 */ int listshow() { for(i=0;i if(dir->list[i].length==0&&(strcmp(dir->list[i].fname,\ { } if(dir->list[i].length!=0&&strcmp(dir->list[i].fname,\ { } fl[sumfile]=i; sumfile++; //为目录的 dr[sumdir]=i; sumdir++; //为目录的 dir=(struct DIR *)(file+currentdir*BLOCK_SIZE); struct DIR *dir; int i,sumfile,sumdir,fl[100],dr[100];//fl 为文件的号数,dr为目录的号数 sumfile=sumdir=0; } for(i=0;i printf(\ %s %s文件\\n\ printf(\ printf(\在该目录下共有%d 个文件, %d 个文件夹\\n\\n\return 0; /* *删除子目录 */ int rmdir(char *str) { for(i=2;i if(strcmp(dir->list[i].fname,str)==0) { break; //找到要删除的子目录 FAT=(struct fatid *)(file+BLOCK_SIZE); dir=(struct DIR *)(file+currentdir*BLOCK_SIZE); //当前目录指针 MAP=(struct map *)(file+(FATNUM+1)*BLOCK_SIZE); char c='a'; int m=2; //做用户交互 //从第三个子目录项开始搜索要删除的目录项情况 struct fatid *FAT; struct DIR *dir; struct DIR *flagdir; //标记目录块 int flag=0; //FAT号 //目录块 int i; int blocknum;