文件操作-源代码_第1页
文件操作-源代码_第2页
文件操作-源代码_第3页
文件操作-源代码_第4页
文件操作-源代码_第5页
已阅读5页,还剩22页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

//Filesystem_operations.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include<iostream>#include<fstream>#include<vector>#include<string>#include<algorithm>//<math.h>#include<sstream>#include<iomanip>#include<conio.h>#include"filesystem_struct.h"usingnamespacestd;#defineNum16//每个用户最大文件数#defineDISK_SIZE100MFDmfdlist[Num];UFDufdlist[Num];UOFuoflist[Num];DISKdisklist[DISK_SIZE];intcurrent_user_position;//当前用户在ufdlist中的位置//格式化磁盘voidformat_disk();//将更新后的物理块的信息重新写回磁盘voidback_disklist();//从磁盘中获得物理块的信息voidget_disklist();//将更新后的MFD重新写回磁盘voidback_mfdlist();//从磁盘中获得MFDvoidget_mfdlist();//将更新后的UFD重新写回磁盘voidback_ufdlist();//从磁盘中获得UFDvoidget_ufdlist();//在ufdlist中寻找可用的ufdintfind_empty_ufd();//在disklist中寻找可用的物理块intfind_empty_block();//在mfdlist中寻找可用的mfdintfind_empty_mfd();//在用户注销后,去除ufdlist和uoflistvoidclear_alllist();//返回以block物理块为第1个文件块的文件的第length个字节所在的物理块号intget_appointfile_block(intblock,intlength);//改变文件属性voidchatt(stringfilename,charattribute);//改变文件拥有者voidchown(stringfilename,stringnew_owner);//关闭文件voidclose(stringfilename);//文件拷贝voidcopy(stringsrcFile,stringdesFile);//srcFile源文件,desFile目标文件//建立文件voidcreat(stringfilename,charattribute);//删除文件voiddelet(stringfilename);//列出该用户下所有文件voidfiledir();//显示本系统命令voidhelp();//用户登陆voidlogin();//用户登出voidlogout();//翻开文件voidopen(stringfilename,charattribute);//修改用户密码voidpasswd(stringoldPwd,stringnewPwd);//将文件读指针开始的nbytes个字符读到屏幕上voidread(stringfilename,intnbytes);//改变文件名voidchfname(stringsrcFile,stringdesFile);//显示文件内容voidoutfile(stringfilename);//将数据buffer的前nbytes个写入到写指针指定的位置voidwrite(stringfilename,stringbuffer,intnbytes);//从键盘输入文件,可以包含任意字符(可见)。//当输入ctrl+z,表示输入结束voidwrite(stringfilename);//命令调用入口函数voidrun();//格式化磁盘voidformat_disk(){ ofstreamoutfile; outfile.open("disk.txt",ios::binary); for(inti=0;i<DISK_SIZE;i++) { outfile<<string(512,'')<<'\n'; } outfile.seekp(0,ios::beg); for(i=0;i<DISK_SIZE;i++) { outfile<<(char)i; outfile<<'0'<<char(0)<<''; } outfile.close(); cout<<"系统格式化成功!所有用户数据已经清空!\n";}//将更新后的物理块的信息重新写回磁盘voidback_disklist(){ ofstreamoutfile; outfile.open("disk.txt",ios::binary|ios::in); for(inti=0;i<DISK_SIZE;i++) { outfile<<disklist[i].id<<disklist[i].flag<<disklist[i].next<<''; } outfile.close();}//从磁盘中获得物理块的信息voidget_disklist(){ ifstreaminfile; infile.open("disk.txt",ios::binary); for(inti=0;i<DISK_SIZE;i++) { disklist[i].id=infile.get(); disklist[i].flag=infile.get(); disklist[i].next=infile.get(); infile.ignore();//这里假设一行不会超过1000个字符,所以含义是忽略一行 } infile.close();}//将更新后的MFD重新写回磁盘voidback_mfdlist(){ ofstreamoutfile; outfile.open("disk.txt",ios::binary|ios::in); outfile.seekp(513,ios::beg); for(inti=0;i<Num;i++) { outfile<<mfdlist[i].username<<string(14-mfdlist[i].username.size(),''); outfile<<mfdlist[i].userpwd<<string(14-mfdlist[i].userpwd.size(),''); outfile<<mfdlist[i].link<<string(3,''); } outfile.close();}//从磁盘中获得MFDvoidget_mfdlist(){ ifstreaminfile; infile.open("disk.txt",ios::binary); infile.seekg(513); for(inti=0;i<Num;i++) { charusername[14]; infile.read(username,14); mfdlist[i].username=username; mfdlist[i].username=mfdlist[i].username.substr(0,mfdlist[i].username.find('')); charuserpwd[14]; infile.read(userpwd,14); mfdlist[i].userpwd=userpwd; mfdlist[i].userpwd=mfdlist[i].userpwd.substr(0,mfdlist[i].userpwd.find('')); mfdlist[i].link=infile.get(); infile.seekg(3,ios::cur); } infile.close();}//将更新后的UFD重新写回磁盘voidback_ufdlist(){ ofstreamoutfile; outfile.open("disk.txt",ios::binary|ios::in); outfile.seekp(513*(current_user_position+2),ios::beg); for(inti=0;i<Num;i++) { outfile<<ufdlist[i].filename<<string(14-ufdlist[i].filename.size(),''); outfile<<ufdlist[i].attribute; outfile.write((char*)(&ufdlist[i].length),sizeof(int)); outfile<<ufdlist[i].first_physical_block; outfile<<string(12,''); } outfile.close();}//从磁盘中获得UFDvoidget_ufdlist(){ ifstreaminfile; infile.open("disk.txt",ios::binary); infile.seekg(513*mfdlist[current_user_position].link); for(inti=0;i<Num;i++) { charfilename[14]; infile.read(filename,14); ufdlist[i].filename=filename; ufdlist[i].filename=ufdlist[i].filename.substr(0,ufdlist[i].filename.find('')); infile.get(ufdlist[i].attribute); infile.read((char*)(&ufdlist[i].length),sizeof(int)); infile.get(ufdlist[i].first_physical_block); infile.seekg(12,ios::cur); } infile.close();}//在ufdlist中寻找可用的ufdintfind_empty_ufd(){ for(inti=0;i<Num;i++) { if(ufdlist[i].filename=="") returni; } return-1;}//在disklist中寻找可用的物理块intfind_empty_block(){ for(inti=18;i<DISK_SIZE;i++) { if(disklist[i].flag=='0') { //将其改为已分配 disklist[i].flag='1'; returni; } } return-1;}//在mfdlist中寻找可用的mfdintfind_empty_mfd(){ for(inti=0;i<Num;i++) { if(mfdlist[i].username=="") returni; } return-1;}//在用户注销后,去除ufdlist和uoflistvoidclear_alllist(){ for(inti=0;i<Num;i++) { ufdlist[i].filename=""; uoflist[i].filename=""; }}//返回以block物理块为第1个文件块的文件的第length个字节所在的物理块号intget_appointfile_block(intblock,intlength){ intblockNum=length/512; if(blockNum==0) { returnblock; } intfirst_physical_block=block; for(inti=1;i<=blockNum;i++) { first_physical_block=disklist[first_physical_block].next; } returnfirst_physical_block;}//从键盘输入文件,可以包含任意字符(可见)。//当输入ctrl+z,表示输入结束stringinput_data_infile(){ strings; while(1) { intc=getch(); if(c==26)//ascii中的sub,即^Z { printf("^Z"); break; } if(c==13)//ascii中的cr,即回车 { printf("\n"); s+='\n'; } else { printf("%c",c); s+=char(c); } } returns;}//////////////////////////////////////////////////////////////////////////////////系统命令函数,共有Num+1条命令/////////////////////////////////////////////////////////////////////////////////////////////改变文件属性voidchatt(stringfilename,charattribute){ for(inti=0;i<Num;i++) { if(ufdlist[i].filename==filename) break; } if(i==Num) { cout<<"该文件不存在!\n"; return; } ufdlist[i].attribute=attribute; uoflist[i].attribute=attribute; cout<<"已成功改变文件属性!\n";}//改变文件拥有者voidchown(stringfilename,stringnew_owner){ for(inti=0;i<Num;i++) { if(ufdlist[i].filename==filename) break; } if(i==Num) { cout<<"该文件不存在!\n"; return; } for(intk=0;k<Num;k++) { if(mfdlist[k].username==new_owner) break; } if(k==Num) { cout<<"该用户不存在!\n"; return; } intoldufdindex=i; UFDoldufd=ufdlist[oldufdindex]; UFDoldownerufdlist[Num]; copy(ufdlist,ufdlist+Num,oldownerufdlist); intoldownerindex=current_user_position; current_user_position=k; //获得新用户的UFD get_ufdlist(); boolhavefile=false; intufdindex=-1; for(i=0;i<Num;i++) { if(ufdlist[i].filename==filename) { havefile=true; } if(ufdindex==-1&&ufdlist[i].filename=="") { ufdindex=i; } } if(ufdindex==-1) { cout<<"新用户的文件总数已满!\n"; //恢复旧用户的UFD current_user_position=oldownerindex; copy(oldownerufdlist,oldownerufdlist+Num,ufdlist); return; } if(havefile) { cout<<"新用户的已经有同名文件!\n"; //恢复旧用户的UFD current_user_position=oldownerindex; copy(oldownerufdlist,oldownerufdlist+Num,ufdlist); return; } ufdlist[ufdindex]=oldufd; back_ufdlist(); //恢复旧用户的UFD current_user_position=oldownerindex; copy(oldownerufdlist,oldownerufdlist+Num,ufdlist); ufdlist[oldufdindex].filename=""; cout<<"已成功改变文件拥有者!\n";}//关闭文件voidclose(stringfilename){ for(inti=0;i<Num;i++) { if(uoflist[i].filename==filename) break; } if(i==Num) { cout<<"该文件未翻开!\n"; return; } //删除UOF uoflist[i].filename=""; cout<<"已成功关闭文件!\n";}//文件拷贝voidcopy(stringsrcFile,stringdesFile)//srcFile源文件,desFile目标文件{ for(inti=0;i<Num;i++) { if(ufdlist[i].filename==srcFile) break; } if(i==Num) { cout<<"源文件不存在!\n"; return; } if(srcFile==desFile) { cout<<"源文件和目标文件重名!\n"; return; } for(intk=0;k<Num;k++) { if(ufdlist[k].filename==desFile) break; } if(k!=Num) { cout<<"目标文件已经存在!\n"; return; } ifstreaminfile; infile.open("disk.txt",ios::binary); intfirst_physical_block=ufdlist[i].first_physical_block; stringfile=""; intlength=ufdlist[i].length; //读取源文件中的数据,到file中 while(1) { infile.seekg(513*first_physical_block,ios::beg); if(length>512) { strings; getline(infile,s,'\n'); file+=s; length=length-512; first_physical_block=disklist[first_physical_block].next; } else { strings; getline(infile,s,'\n'); s=s.substr(0,length); file+=s; break; } } //建立目标文件 creat(desFile,ufdlist[i].attribute); //将源文件中的数据写入目标文件中 write(desFile,file,file.size()); cout<<"已成功拷贝文件!\n";}//建立文件voidcreat(stringfilename,charattribute){ for(inti=0;i<Num;i++) { if(ufdlist[i].filename==filename) { cout<<"该文件已经存在,不能重名!\n"; return; } } intufdNum=find_empty_ufd(); if(ufdNum==-1) { cout<<"文件总数已满!\n"; return; } intfirst_physical_block=find_empty_block(); if(first_physical_block==-1) { cout<<"磁盘已满!\n"; return; } //添加到ufdlist中 ufdlist[ufdNum].filename=filename; ufdlist[ufdNum].attribute=attribute; ufdlist[ufdNum].length=0; ufdlist[ufdNum].first_physical_block=first_physical_block; //添加到uoflist中 uoflist[ufdNum].filename=filename; uoflist[ufdNum].attribute=attribute; uoflist[ufdNum].length=0; uoflist[ufdNum].first_physical_block=first_physical_block; uoflist[ufdNum].state='0'; uoflist[ufdNum].readptr=0; uoflist[ufdNum].writeptr=0; cout<<"创立文件"<<filename<<"成功!\n";}//删除文件voiddelet(stringfilename){ for(inti=0;i<Num;i++) { if(ufdlist[i].filename==filename) break; } if(i==Num) { cout<<"该文件不存在!\n"; return; } ufdlist[i].filename=""; //把文件在disk中占用的资源释放 intfirst_physical_block=ufdlist[i].first_physical_block; for(intk=0;k<=ufdlist[i].length%512;k++) { disklist[first_physical_block].flag='0'; first_physical_block=disklist[first_physical_block].next; } //把文件从uoflist中删除 for(i=0;i<Num;i++) { if(uoflist[i].filename==filename) { uoflist[i].filename=""; break; } } cout<<"删除文件"<<filename<<"成功!\n";}//列出该用户下所有文件voidfiledir(){ intcount=0;//计算文件个数 for(inti=0;i<Num;i++) { if(ufdlist[i].filename!="") { count++; cout<<"\t"<<ufdlist[i].filename<<"\t"; if(ufdlist[i].attribute=='0') cout<<"--r--"; elseif(ufdlist[i].attribute=='1') cout<<"--w--"; elseif(ufdlist[i].attribute=='2') cout<<"-r-w-"; cout<<"\t"<<ufdlist[i].length<<"Byte(s)"; cout<<"\t"<<(int)ufdlist[i].first_physical_block<<"\n"; } } cout<<"\t\t\t共有文件"<<count<<"个\n";}//显示本系统命令voidhelp(){ cout.setf(ios::left); cout<<"\t本文件系统命令用法如下:\n\n\n"; cout<<"文件操作的根本命令:\n"; cout<<setw(8)<<"creat"<<setw(10)<<"filename"<<setw(10)<<"attribute"<<"\t新建文件\n" <<"\t\t(attribute(属性):0-read_only;1-write_only;2-read_write)\n"; cout<<setw(8)<<"open"<<setw(10)<<"filename"<<setw(10)<<"attribute"<<"\t翻开文件\n" <<"\t\t(attribute(属性):0-read_only;1-write_only;2-read_write)\n"; cout<<setw(8)<<"close"<<setw(10)<<"filename"<<"\t\t关闭文件\n"; cout<<setw(8)<<"delet"<<setw(10)<<"filename"<<"\t\t删除文件\n"; cout<<setw(8)<<"copy"<<setw(10)<<"源文件名"<<setw(10)<<"目标文件名"<<"\t文件拷贝\n"; cout<<setw(8)<<"read"<<setw(10)<<"filename"<<setw(10)<<"pointer"<<"\t将文件读指针开始的pointer个字符读到屏幕上\n"; cout<<setw(8)<<"write"<<setw(10)<<"filename"<<"\t从键盘输入数据字符写到文件中,结束时按Ctrl+Z\n" <<"\t\t(可以输入任意可见字符,包括空格、回车!)\n"; cout<<setw(8)<<"write"<<setw(10)<<"filename"<<setw(10)<<"buffer"<<setw(10)<<"pointer"<<"\t将数据buffer的前pointer个字符写入文件中\n" <<"\t\t(输入的字符之间不能有空格!)\n"; cout<<setw(8)<<"outfile"<<setw(10)<<"filename"<<"\t\t显示文件内容到屏幕\n"; cout<<setw(8)<<"chfname"<<setw(10)<<"源文件名"<<setw(10)<<"目标文件名"<<"\t改变文件名\n"; cout<<setw(8)<<"chown"<<setw(10)<<"filename"<<setw(10)<<"new_owner"<<"\t改变文件拥有者\n"; cout<<setw(8)<<"chatt"<<setw(10)<<"filename"<<setw(10)<<"attribute"<<"\t改变文件属性\n" <<"\t\t(attribute(属性):0-read_only;1-write_only;2-read_write)\n"; cout<<setw(8)<<"filedir"<<"\t\t\t列出该用户下所有文件\n" <<"\t\t(输出格式:文件名属性大小文件始指针)\n\n"; cout<<"用户登录注销命令:\n"; cout<<setw(8)<<"help"<<"\t\t\t显示本系统所有命令\n"; cout<<setw(8)<<"login"<<setw(10)<<"userName"<<setw(10)<<"pwd"<<"\t用户登陆命令\n"; cout<<setw(8)<<"logout"<<"\t\t\t用户注销\n"; cout<<setw(8)<<"passwd"<<setw(10)<<"oldPwd"<<setw(10)<<"newPwd"<<"\t修改用户密码\n"; }//用户登陆voidlogin(){ while(1) { cout<<">"; vector<string>command; chart[50]; cin.getline(t,50); strings; for(stringstreamsin(t);sin>>s;command.push_back(s)); if(command.empty()) continue; if(command[0]=="exit") { exit(0); } if(command[0]!="login") { cout<<"请使用login命令登陆!\n"; continue; } if(command.size()!=3) { cout<<"请正确地输入用户名和密码!\n"; continue; } stringname=command[1]; stringpassword=command[2]; for(inti=0;i<Num;i++) { if(mfdlist[i].username==name) break; } if(i<Num) { if(password==mfdlist[i].userpwd) { current_user_position=i; get_ufdlist(); cout<<"欢送老用户的归来:"<<name<<"\n"; return; } for(inttime=1;time<=3;time++) { cout<<"密码错误,请重输:(注:输入错误到达三次会自动退出系统)"; cin>>password; if(password==mfdlist[i].userpwd) { current_user_position=i; get_ufdlist();cin.ignore(); cout<<"欢送老用户的归来:"<<name<<"\n"; return; } } if(time>3) { cout<<"错误次数太多!再见\n"; exit(0); } } else { MFDmfd; mfd.username=name; mfd.userpwd=password; current_user_position=find_empty_mfd(); if(current_user_position==-1) { cout<<"用户总数已满!无法添加新用户!\n"; continue; } mfd.link=current_user_position+2; mfdlist[current_user_position]=mfd; get_ufdlist(); cout<<"您是新用户,欢送你的使用:"<<name<<"\n"; cout<<"假设你对本系统的命令不熟悉,请输入help查看!"<<"\n"; return; } } }//用户登出voidlogout(){ back_disklist(); back_mfdlist(); back_ufdlist(); clear_alllist();//在用户注销后,去除ufdlist和uoflist cout<<""<<mfdlist[current_user_position].username<<"您已经注销!\n"; cout<<"退出系统,请输入exit命令!\n";}//翻开文件voidopen(stringfilename,charattribute){ for(inti=0;i<Num;i++) { if(ufdlist[i].filename==filename) break; } if(i==Num) { cout<<"该文件不存在!\n"; return; } if(ufdlist[i].attribute!=attribute) { cout<<"文件属性不合法!不能翻开文件!\n"; return; } if(uoflist[i].filename!="") { if(uoflist[i].state=='1') cout<<"错误!文件已经翻开!\n"; else cout<<"错误!文件正在建立!\n"; return; } uoflist[i].filename=ufdlist[i].filename; uoflist[i].attribute=ufdlist[i].attribute; uoflist[i].length=ufdlist[i].length; uoflist[i].first_physical_block=ufdlist[i].first_physical_block; uoflist[i].state='1'; uoflist[i].readptr=0; uoflist[i].writeptr=0; cout<<"翻开文件"<<filename<<"成功!\n"; }//修改用户口令voidpasswd(stringoldPwd,stringnewPwd){ if(mfdlist[current_user_position].userpwd!=oldPwd) { cout<<"旧密码错误!\n"; return; } mfdlist[current_user_position].userpwd=newPwd; cout<<"已成功修改密码!\n"; }//将文件读指针开始的nbyte个字符读到屏幕上voidread(stringfilename,intnbytes){ for(inti=0;i<Num;i++) { if(uoflist[i].filename==filename) break; } if(i==Num) { cout<<"该文件未翻开!\n"; return; } if(uoflist[i].attribute=='1') { cout<<"该文件只写!\n"; return; } ifstreaminfile; infile.open("disk.txt",ios::binary); intfirst_physical_block=get_appointfile_block(uoflist[i].first_physical_block,uoflist[i].readptr); intoffset=uoflist[i].readptr%512; uoflist[i].readptr+=nbytes; stringread=""; intlength=nbytes; while(1) { infile.seekg(513*first_physical_block+offset,ios::beg); if(length+offset>512) { chara[513]; infile.read(a,512-offset); strings=a; read=read+s; length=length-512-offset; first_physical_block=disklist[first_physical_block].next; offset=0; } else { chara[513]; infile.read(a,512); strings=a; s=s.substr(0,length); read+=s; break; } } cout<<read<<"\n";}//改变文件名voidchfname(stringsrcFile,stringdesFile){ boolhavesrcFile=false; boolhavedesFile=false; intt=-1; for(inti=0;i<Num;i++) { if(ufdlist[i].filename==srcFile) { havesrcFile=true; if(t==-1)t=i; } if(ufdlist[i].filename==desFile) { havedesFile=true; } } if(!havesrcFile) { cout<<"该文件不存在!\n"; return; } if(havedesFile) { cout<<"存在一个重名文件!\n"; return; } ufdlist[t].filename=desFile; uoflist[t].filename=desFile; cout<<"已成功改变文件名!\n";}//显示文件内容voidoutfile(stringfilename){ for(inti=0;i<Num;i++) { if(ufdlist[i].filename==filename) break; } if(i==Num) { cout<<"该文件不存在!\n"; return; } intfirst_physical_block=ufdlist[i].first_physical_block; intlength=ufdlist[i].length; stringfile=""; ifstreaminfile; infile.open("disk.txt",ios::binary); while(1) { infile.seekg(513*first_physical_block,ios::beg); if(length>512) { chara[513]; infile.read(a,512); strings=a; s=s.substr(0,512); file+=s; length=length-512; first_physical_block=disklist[first_physical_block].next; } else { chara[513]; infile.read(a,512); strings=a; s=s.substr(0,length); file+=s; break; } } cout<<file<<endl;}//将buffer中的nbytes个字符写入到写指针指定的位置voidwrite(stringfilename,stringbuffer,intnbytes){ for(inti=0;i<Num;i++) { if(uoflist[i].filename==filename) break; } if(i==Num) { cout<<"该文件未翻开!\n"; return; } if(uoflist[i].attribute=='0') { cout<<"该文件只读!\n"; return; } if(buffer.size()>nbytes) buffer=buffer.substr(0,nbytes); if(buffer.size()<nbytes) nbytes=buffer.size(); intfirst_physical_block=get_appointfile_block(uoflist[i].first_physical_block,uoflist[i].writeptr); intoffset=uoflist[i].writeptr%512; uoflist[i].writeptr+=nbytes; boolisadd=false; if(uoflist[i].writeptr>uoflist[i].length) { uoflist[i].length=uoflist[i].writeptr; ufdlist[i].length=uoflist[i].writeptr; isadd=true; } ofstreamoutfile; outfile.open("disk.txt",ios::binary|ios::in); while(1) { outfile.seekp(513*first_physical_block+offset,ios::beg); if(buffer.size()>512-offset) { outfile<<buffer.substr(0,512-offset); buffer=buffer.substr(512-offset,buffer.size()-512); //找下一个物理块 if(disklist[first_physical_block].next==0) { disklist[first_physical_block].next=find_empty_block(); if(first_physical_block==-1) { cout<<"磁盘已满!未能全部写入!\n"; return; } } first_physical_block=disklist[first_physical_block].next; offset=0; } else { outfile<<buffer; if(isadd) outfile<<string(512-buffer.size(),''); break; } } cout<<"已成功写入文件!\n"; }//从键盘输入文件,可以包含任意字符(可见)。//当输入ctrl+z,表示输入结束voidwrite(stringfilename){ for(inti=0;i<Num;i++) { if(uoflist[i].filename==filename) break; } if(i==Num) { cout<<"该文件未翻开!\n"; return; } if(uoflist[i].attribute=='0') { cout<<"该文件只读!\n"; return; } //把文件在disk中占用的资源释放,除第一个物理块外 intfirst_physical_block=uoflist[i].first_physical_block; first_physical_block=disklist[first_physical_block].next; for(intk=1;k<=ufdlist[i].length%512;k++) { disklist[first_physical_block].flag='0'; first_physical_block=disklist[first_physical_block].next; } cout<<"请输入文件内容,结束时按Ctrl+Z\n"; //从控制台中获得文件 stringfile=input_data_infile(); first_physical_block=uoflist[i].first_physical_block; uoflist[i].writeptr=file.size(); uoflist[i].length=file.size(); ufdlist[i].length=file.size(); ofstreamoutfile; outfile.open("disk.txt",ios::binary|ios::in); while(1) { outfile.seekp(513*first_physical_block,ios::beg); if(file.size()>512) { outfile<<file.substr(0,512); file=file.substr(512,file.size()-512); //找下一个物理块 if(disklist[first_physical_block].next==0) { disklist[first_physical_block].next=find_empty_block(); if(first_physical_block==-1) { cout<<"磁盘已满!未能全部写入!\n"; return; } } first_physical_block=disklist[first_physical_block].next; } else { outfile<<file; outfile<<string(512-file.size(),''); break; } } cout<<"\n已成功写入文件!\n";}//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////voidrun(){ stringERROR="命令的参数错误!\n"; while(1) { cout<<mfdlist[current_user_position].username<<">"; vector<string>command; chart[1000]; cin.getline(t,1000); strings; for(stringstreamsin(t);sin>>s;command.push_back(s)); if(command.empty()) continue; if(command[0]=="chatt") { if(command.size()!=3) cout<<ERROR; else { if(command[2]!="0"&&command[2]!="1"&&command[2]!="2") cout<<ERROR; elsechatt(command[1],command[2][0]); } } elseif(command[0]=="chown") { if(command.size()!=3) cout<<ERROR; else chown(command[1],command[2]); } elseif(command[0]=="close") { if(command.size()!=2) cout<<ERROR; else close(command[1]); } elseif(command[0]=="copy") { if(command.size()!=3) cout<<ERROR; else { copy(command[1],command[2]); } } elseif(command[0]=="creat") { if(command.size()!=3) cout<<ERROR; else { if(command[2]!="0"&&command[2]!="1"&&command[2]!="2") cout<<ERROR;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论