}
}
}
for( j=0; j strcpy(direct[i]->fileName,filename); //设置文件名称 direct[i]->parentID=currentDirID; //设置文件父节点号 inode[j]->fileAssociated=0; inode[j]->fileGroup=0; inode[j]->fileLength=0; //设置i节点文件关联数 //设置文件组 //设置文件长度 //设置文件权限 //设置文件拥有者 //设置文件类型 //设置文件时间 if(superblock->freeINode[j]==0) {//第j个i节点空闲 } direct[i]->directoryID=j; //文件目录使用该i节点 superblock->freeINode[j]=1; //第j个i节点被占用 break; inode[j]->fileAssociated=1; inode[j]->fileMod=defaultMask; strcpy(inode[j]->fileOwner,owner); inode[j]->fileStyle=style; time(&inode[j]->modifyTime); //当前文件长度加 if(currentDirID!=-1) { } return i; //返回新创建文件号 inode[direct[currentDirID]->directoryID]->fileLength++; cout<<\; //保存信息 writeDisk(); return -1; //创建新目录 int makeDirectory(int currentDirID, int currentuserID,int style) { //读入文件名 cout<<\; string name; cin>>name; char fileName[256]; int i; } for(i=0; i fileName[i]=name[i]; fileName[i]='\\0'; //获取用户名 char fileOwner[10]; strcpy(fileOwner,users[currentuserID]->userName); //创建目录 currentDirID=createDirectory(fileName,currentDirID,style,fileOwner); //保存信息 writeDisk(); return currentDirID; //显示当前目录 void currentDir(int currentDirID) { } //改变当前路径 int changeDirectory(int currentDirID, int currentuserID) { //输入二级命令 cout<<\; string nextCommand; cin>>nextCommand; //如果是往上一层目录 list while(currentDirID!=-1 && direct[currentDirID]->parentID!=-1) { } //把根节点的文件名存入链表 dir.push_front(direct[currentDirID]->fileName); dir.push_front(\); //遍历链表,输出当前路径 list for(dirIterator=dir.begin(); dirIterator!=dir.end(); dirIterator++) cout<<(*dirIterator); cout<<\; //把当前节点的文件名存入链表 dir.push_front(direct[currentDirID]->fileName); dir.push_front(\); currentDirID=direct[currentDirID]->parentID; } if(nextCommand==\) { } else {//如果是往下一层目录 } return currentDirID; for(int i=0; i cout<<\< string fileName=direct[i]->fileName; //如果找到文件,返回文件号,否则提示找不到该文件 if(nextCommand==fileName && inode[direct[i]->directoryID]->fileStyle==0 && direct[i]->parentID==currentDirID) return i; if(direct[currentDirID]->parentID!=-1) { } //已处于根目录,不能往上一层 cout<<\; return currentDirID; currentDirID=direct[currentDirID]->parentID; else //删除目录 void removeDirectory(int currentDirID) { //判断当前文件目录下是否存在要删除的目录 bool flag=false; int dirNum=-1,i=0; for(i=0; i string fileName=direct[i]->fileName; if(direct[i]->parentID==currentDirID && fileName==name) { dirNum=i; //输入要删除的文件目录名 cout<<\; string name; cin>>name; } } flag=true; break; if(flag) {//在要删除的目录在当前目录下 } //判断在要删除的目录下是否存在子文件 bool ifContain=false; for(i=0; i if(ifContain) cout<<\; else {//要删除的目录下不存在子文件,给与删除 } cout<<\; int deleteiNodeNum=direct[dirNum]->directoryID; //回收目录项 strcpy(direct[dirNum]->fileName,\); direct[dirNum]->directoryID=-1; direct[dirNum]->parentID=-1; //回收i节点 for(i=0; i<13; i++) //超级块中空闲i节点增加一个 superblock->freeINode[deleteiNodeNum]=0; //当前文件目录下文件数减 inode[direct[currentDirID]->directoryID]->fileLength++; //保存信息 writeDisk(); cout<<\; inode[deleteiNodeNum]->fileAddress[i]=-1; inode[deleteiNodeNum]->fileLength=-1; if(direct[i]->parentID==dirNum) { } ifContain=true; break; else } //更改文件名 void changeFileName(int currentDirID) { //判断当前文件目录下是否存在要更改文件名的文件 bool flag=false; int dirNum=-1,i=0; for(i=0; i cout<<\< strcpy(direct[dirNum]->fileName,fileNewName); cout<<\; //保存信息 writeDisk(); string fileName=direct[i]->fileName; if(direct[i]->parentID==currentDirID && fileName==name) { } dirNum=i; flag=true; break; //输入文件的新名 cout<<\; string newName; cin>>newName; char fileNewName[256]; int j; for(j=0; j fileNewName[j]=newName[j]; fileNewName[j]='\\0'; //输入要修改文件名的文件名称 cout<<\; string name; cin>>name;