📄 mdomain.cpp
字号:
#include<iostream.h>
#include<stdlib.h>
#include<string.h>
#include<iomanip.h>
#include <time.h>
#include<dos.h>
#include <afx.h>
#include "DFattribute.h"
#define maxDFnum 100
typedef struct //定义输出路径的栈
{
int data[maxDFnum];
int top;
}seqstack;
DFattribute DFobj[maxDFnum];
time_t now;
int DFnum=0; //记录DFobj个数
int nowD,fathD; //记录当前目录,父目录
void GetPath(int i) //由当前目录查找到根目录并输出显示出来
{
seqstack *s;
s=(seqstack *)malloc(sizeof(seqstack));
s->top=-1; //置空栈
do{
if((DFobj[i].type=='D')&&(i!=0))
{
s->top++;
s->data[s->top]=i;
i=DFobj[i].FatherDir;
}
else
i=DFobj[i].FatherDir;
}while(i!=0);
if(s->top==-1)
cout<<"\\";
else
while(s->top!=-1)
{
cout<<"\\"<<DFobj[s->data[s->top]].Name;
s->top--;
}
}
int JugPath(char DFname[100]) //判断路径是否存在当前目录下,是则返回最后DF的nowDF,否则返回0
{
char buf[20];
int l;
if(DFname[0]=='\\') //处理\gdsjog***的
{
l=0;
buf[0]='\\';
buf[1]='\0';
}
else
l=nowD;
if(DFname[strlen(DFname)-1]=='\\') //处理****gae\形式的
DFname[strlen(DFname)-1]='\0';
for(int i=0,j=0;i<(int)strlen(DFname)+1;i++) //处理形如 abcde\dede\oweog的形式
{
if((DFname[i]!='\\')&&(DFname[i]!='\0'))
{
buf[j]=DFname[i];
buf[j+1]='\0';
j++;
}
else
{
j=0;
for(int k=0;k<DFnum;k++)
{
if((strcmp(buf,DFobj[k].Name)==0)&&(l==DFobj[k].FatherDir)&&(DFobj[k].type=='D'))
{
l=DFobj[k].NowDir;
break;
}
if((k==DFnum-1)&&((strcmp(buf,DFobj[k].Name)!=0)||(l!=DFobj[k].FatherDir)||(DFobj[k].type!='D')))
l=-1;
}
}
if(l==-1)
break;
}
if(l==-1)
cout<<"系统找不到指定的路径。"<<endl;
return l;
}
void MD(char *DFname)
{
/* char buf[20];
int l;
if((strcmp(DFname,"\\\\")==0))
cout<<"文件名,目录名或卷标语法不正确。"<<endl;
else
{
if(DFname[0]=='\\') //处理\gdsjog***的
{
l=0;
buf[0]='\\';
buf[1]='\0';
}
else
l=nowD;
if(DFname[strlen(DFname)-1]=='\\') //处理****gae\形式的
DFname[strlen(DFname)-1]='\0';
}
for(int i=0,j=0;i<(int)strlen(DFname)+1;i++) //处理形如 abcde\dede\oweog的形式
{
if((DFname[i]!='\\')&&(DFname[i]!='\0'))
{
buf[j]=DFname[i];
buf[j+1]='\0';
j++;
}
else
{
j=0;
for(int k=0;k<DFnum;k++)
{
if((strcmp(buf,DFobj[k].Name)==0)&&(l==DFobj[k].FatherDir)&&(DFobj[k].type=='D'))
{
cout<<"子目录或文件 "<<DFname<<" 已经存在。"<<endl;
break;
}
if((k==DFnum-1)&&((strcmp(buf,DFobj[k].Name)!=0)||(l!=DFobj[k].FatherDir)||(DFobj[k].type!='D')))
l=-1;
}
}
if(l==-1)
break;
}
if(l==-1)
cout<<"系统找不到指定的路径。"<<endl;*/
int repeat=0;
for(int k=0;k<DFnum;k++)
{
if((strcmp(DFname,DFobj[k].Name)==0)&&(nowD==DFobj[k].FatherDir))
{
cout<<"子目录或文件 "<<DFname<<" 已经存在。"<<endl;
repeat=1;
break;
}
if((k==DFnum-1)&&((strcmp(DFname,DFobj[k].Name)!=0)||(nowD!=DFobj[k].FatherDir)))
repeat=0;
}
if(repeat==0)
{
time(&now);
strcpy(DFobj[DFnum].CreateTime,ctime(&now));
DFobj[DFnum].bu=0;
strcpy(DFobj[DFnum].Name,DFname);
DFobj[DFnum].NowDir=DFnum+1;
DFobj[DFnum].FatherDir=nowD;
DFobj[DFnum].type='D';
DFnum++;
}
}
void MK(char *DFname)
{
int repeat=0;
for(int k=0;k<DFnum;k++)
{
if((strcmp(DFname,DFobj[k].Name)==0)&&(nowD==DFobj[k].FatherDir))
{
cout<<"子目录或文件 "<<DFname<<" 已经存在。"<<endl;
repeat=1;
break;
}
if((k==DFnum-1)&&((strcmp(DFname,DFobj[k].Name)!=0)||(nowD!=DFobj[k].FatherDir)))
repeat=0;
}
if(repeat==0)
{
time(&now);
strcpy(DFobj[DFnum].CreateTime,ctime(&now));
DFobj[DFnum].bu=0;
strcpy(DFobj[DFnum].Name,DFname);
DFobj[DFnum].NowDir=DFnum+1;
DFobj[DFnum].FatherDir=nowD;
DFobj[DFnum].type='F';
DFnum++;
}
}
void CD(char *DFname)
{
int i;
if(strcmp(DFname,".")==0)
;
else if(strcmp(DFname,"..")==0)
for(int j=0;j<DFnum;j++)
if(nowD==DFobj[j].NowDir)
{
nowD=DFobj[j].FatherDir;
break;
}
else
;
else if(strcmp(DFname,"\\\\")==0)
{
cout<<"'\\\\'"<<endl;
cout<<"CMD 不支持将 UNC 路径作为当前目录。"<<endl;
}
else
{
i=JugPath(DFname);
if(i!=-1)
nowD=i;
}
cout<<endl;
}
void DIR()
{
char DFname[100];
DFname[0]=getchar();
if(DFname[0]=='\n')
{
int Dnum=0,Fnum=0;
cout<<endl;
cout<<" ";
GetPath(nowD);
cout<<" 的目录"<<endl;
cout<<endl;
for(int j=0;j<DFnum;j++)
{
if(DFobj[j].FatherDir==nowD)
DFobj[j].print();
if((DFobj[j].type=='D')&&(DFobj[j].FatherDir==nowD))
Dnum++;
if((DFobj[j].type=='F')&&(DFobj[j].FatherDir==nowD))
Fnum++;
}
cout<<resetiosflags(ios::left)<<setw(20)<<Fnum<<" 个文件"<<endl;
cout<<resetiosflags(ios::left)<<setw(20)<<Dnum<<" 个目录"<<endl;
cout<<endl;
}
}
void RD(char *DFname)
{
for(int k=0;k<DFnum;k++)
{
if((strcmp(DFname,DFobj[k].Name)==0)&&(nowD==DFobj[k].FatherDir)&&(DFobj[k].type=='D'))
{
for(int m=0;m<DFnum;m++)
{
if(DFobj[m].FatherDir==DFobj[k].NowDir)
{
cout<<"目录不是空的。"<<endl;
break;
}
if((m==DFnum-1)&&(DFobj[m].FatherDir!=DFobj[k].NowDir))
{
for(int m1=k;m1<DFnum;m1++)
DFobj[m1]=DFobj[m1+1];
DFnum--;
break;
}
}
break;
}
if((k==DFnum-1)&&((strcmp(DFname,DFobj[k].Name)!=0)||(nowD!=DFobj[k].FatherDir)||(DFobj[k].type!='F')))
cout<<"系统找不到指定的目录。"<<endl;
}
}
void DEL(char *DFname)
{
for(int k=0;k<DFnum;k++)
{
if((strcmp(DFname,DFobj[k].Name)==0)&&(nowD==DFobj[k].FatherDir)&&(DFobj[k].type=='F'))
{
for(int m=k;m<DFnum;m++)
DFobj[m]=DFobj[m+1];
DFnum--;
break;
}
if((k==DFnum-1)&&((strcmp(DFname,DFobj[k].Name)!=0)||(nowD!=DFobj[k].FatherDir)||(DFobj[k].type!='F')))
cout<<"文件 "<<DFname<<" 不存在。"<<endl;
}
}
void initialize()
{
time(&now);
strcpy(DFobj[DFnum].CreateTime,ctime(&now));
DFobj[DFnum].bu=0;
strcpy(DFobj[DFnum].Name,"\\");
DFobj[DFnum].NowDir=0;
DFobj[DFnum].FatherDir=0;
DFobj[DFnum].type='D';
DFnum++;
time(&now);
strcpy(DFobj[DFnum].CreateTime,ctime(&now));
DFobj[DFnum].bu=0;
strcpy(DFobj[DFnum].Name,"J1");
DFobj[DFnum].NowDir=1;
DFobj[DFnum].FatherDir=0;
DFobj[DFnum].type='D';
DFnum++;
time(&now);
strcpy(DFobj[DFnum].CreateTime,ctime(&now));
DFobj[DFnum].bu=0;
strcpy(DFobj[DFnum].Name,"J2");
DFobj[DFnum].NowDir=2;
DFobj[DFnum].FatherDir=0;
DFobj[DFnum].type='D';
DFnum++;
time(&now);
strcpy(DFobj[DFnum].CreateTime,ctime(&now));
DFobj[DFnum].bu=0;
strcpy(DFobj[DFnum].Name,"J3");
DFobj[DFnum].NowDir=3;
DFobj[DFnum].FatherDir=0;
DFobj[DFnum].type='F';
DFnum++;
time(&now);
strcpy(DFobj[DFnum].CreateTime,ctime(&now));
DFobj[DFnum].bu=0;
strcpy(DFobj[DFnum].Name,"J1");
DFobj[DFnum].NowDir=4;
DFobj[DFnum].FatherDir=2;
DFobj[DFnum].type='D';
DFnum++;
time(&now);
strcpy(DFobj[DFnum].CreateTime,ctime(&now));
DFobj[DFnum].bu=0;
strcpy(DFobj[DFnum].Name,"F1");
DFobj[DFnum].NowDir=5;
DFobj[DFnum].FatherDir=2;
DFobj[DFnum].type='F';
DFnum++;
time(&now);
strcpy(DFobj[DFnum].CreateTime,ctime(&now));
DFobj[DFnum].bu=0;
strcpy(DFobj[DFnum].Name,"F2");
DFobj[DFnum].NowDir=6;
DFobj[DFnum].FatherDir=4;
DFobj[DFnum].type='F';
DFnum++;
}
void main()
{
char order[10],DFname[100],getstr[110];
nowD=0;fathD=0;
initialize();
for(int j=0;j<DFnum;j++)
DFobj[j].print();
cout<<"-----多级目录管理-----"<<endl;
cout<<"MD 创建一个子目录"<<endl;
cout<<"Mk 创建一个文件"<<endl;
cout<<"CD 进入一个子目录"<<endl;
cout<<"DIR 列出当前目录下内容"<<endl;
cout<<"RD 删除一个空目录"<<endl;
cout<<"DEL 删除文件"<<endl;
cout<<"EXIT 退出程序"<<endl;
for(;;)
{
GetPath(nowD);
cout<<">";
cin>>order;
scanf("%s",getstr);
if((strcmp(order,"exit")==0)||(strcmp(order,"EXIT")==0))
exit(0);
else if((strcmp(order,"dir")==0)||(strcmp(order,"DIR")==0))
DIR();
else
{
cin>>DFname;
if((strcmp(order,"md")==0)||(strcmp(order,"MD")==0))
MD(DFname);
else if((strcmp(order,"mk")==0)||(strcmp(order,"MK")==0))
MK(DFname);
else if((strcmp(order,"cd")==0)||(strcmp(order,"CD")==0))
CD(DFname);
else if((strcmp(order,"rd")==0)||(strcmp(order,"RD")==0))
RD(DFname);
else if((strcmp(order,"del")==0)||(strcmp(order,"DEL")==0))
DEL(DFname);
else
cout<<"'"<<order<<"' 不是内部或外部命令。"<<endl;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -