📄 dos.c
字号:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <malloc.h>
#define NULL 0
#define TRUE 1
#define FALSE 0
typedef struct Folder
{
char FolderName[10];
struct Folder *ChildFolder;
struct Folder *BrotherFolder;
struct Folder *ParentFolder;
}Folder;
Folder *pFolder;
Folder *CreateDisk()
{
Folder *pFolder;
pFolder=(Folder *)malloc(sizeof(Folder));
if(!pFolder)
{
return NULL;
}
else
{
pFolder->ChildFolder=NULL;
pFolder->ParentFolder=NULL;
pFolder->BrotherFolder=NULL;
strcpy(pFolder->FolderName,"Localhost");
return pFolder;
}
}
Folder *CreateChildFolder(char FolderName[10])
{
Folder *cFolder;
cFolder=(Folder *)malloc(sizeof(Folder));
if(pFolder->ChildFolder==NULL)
{
if(!cFolder)
{
printf("\nError!!!\nCan't create Folder!!");
return NULL;
}
else
{
pFolder->ChildFolder=cFolder;
cFolder->ParentFolder=pFolder;
cFolder->ChildFolder=NULL;
cFolder->BrotherFolder=NULL;
strcpy(cFolder->FolderName,FolderName);
return cFolder;
}
}
if(pFolder->ChildFolder!=NULL)
{
if(!cFolder)
{
printf("\nError!!!\nCan't create Folder!!");
return NULL;
}
else
{
pFolder=pFolder->ChildFolder;
while(1)
{
if(pFolder->BrotherFolder==NULL)
{
break;
}
else if(pFolder->BrotherFolder!=NULL)
{
pFolder=pFolder->BrotherFolder;
continue;
}
}
pFolder->BrotherFolder=cFolder;
cFolder->ParentFolder=pFolder->ParentFolder;
cFolder->ChildFolder=NULL;
cFolder->BrotherFolder=NULL;
strcpy(cFolder->FolderName,FolderName);
return cFolder;
}
}
}
OpenChildFolder(char FolderName[10],int sum)
{
if(pFolder->ChildFolder==NULL)
{
if(sum==1)
{
printf("\nThere is no childfolder in this folder!");
}
}
else if(pFolder->ChildFolder!=NULL)
{
pFolder=pFolder->ChildFolder;
do{
if(strcmp(pFolder->FolderName,FolderName)==0)
{
break;
}
else
{
if(pFolder->BrotherFolder==NULL)
{
if(sum==1)
{
printf("\nthere is no file!");
}
break;
}
if(pFolder->BrotherFolder!=NULL)
{
pFolder=pFolder->BrotherFolder;
continue;
}
}
}while(1);
}
}
DIRoperation()
{
Folder *searchFolder;
int sum;
printf("\n%s Folder!!\n",pFolder->FolderName);
if(pFolder->ChildFolder==NULL)
{
printf("\n no File!\n");
}
else
{
searchFolder=pFolder->ChildFolder;
sum=0;
do
{
printf("\n %d %s",&sum,searchFolder->FolderName);
if(searchFolder->BrotherFolder==NULL)
{
sum++;
printf("\n %d files\n",sum);
break;
}
else
{
searchFolder=searchFolder->BrotherFolder;
sum++;
continue;
}
}while(1);
}
}
DelFolder(char FolderName[10])
{
Folder *targetFolder;
Folder *searchFolder;
pFolder=pFolder->ParentFolder;
targetFolder=pFolder->ChildFolder;
if(strcmp(targetFolder->FolderName,FolderName)==0)
{
if(targetFolder->BrotherFolder==NULL)
{
pFolder->ChildFolder=NULL;
}
else
{
searchFolder=targetFolder->BrotherFolder;
pFolder->ChildFolder=searchFolder;
}
}
else
{
searchFolder=targetFolder->BrotherFolder;
while(1)
{
if(strcmp(targetFolder->FolderName,FolderName)==0)
{
if(searchFolder->BrotherFolder==NULL)
{
targetFolder->BrotherFolder=NULL;
break;
}
else
{
searchFolder->BrotherFolder=searchFolder->BrotherFolder;
break;
}
}
else
{
targetFolder=searchFolder;
searchFolder=searchFolder->BrotherFolder;
continue;
}
}
}
}
Location()
{
Folder *saveFolder;
char loc[200];
int i,mark;
mark=0;
for(i=0;i<200;i++)
{
loc[i]='\0';
}
saveFolder=pFolder;
while(1)
{
i=0;
while(saveFolder->FolderName[i+1]!='\0')
{
i++;
}
while(i>=0)
{
loc[mark]=saveFolder->FolderName[i];
if(i==0)
{
loc[mark+1]=92;
mark=mark+2;
break;
}
else
{
i--;
mark++;
}
}
if(saveFolder->ParentFolder==NULL)
{
break;
}
else
{
saveFolder=saveFolder->ParentFolder;
continue;
}
}
printf("\n");
mark--;
while(mark>=0)
{
printf("%c",loc[mark]);
if(mark==0)
{
break;
}
mark--;
}
printf(">");
}
MDoperation(int i,int mark,char order[50],char FolderName[10])
{
while(order[mark]!='\0')
{
if(order[mark]==' ')
{
mark++;
continue;
}
else if(order[mark]==92)
{
while(pFolder->ParentFolder!=NULL)
{
pFolder=pFolder->ParentFolder;
}
++mark;
while(1)
{
FolderName[i]=order[mark];
if(order[mark+1]==92)
{
mark=mark+2;
pFolder=CreateChildFolder(FolderName);
for(;i>0;i--)
{
FolderName[i]='\0';
}
continue;
}
if(order[mark+1]=='\0')
{
pFolder=CreateChildFolder(FolderName);
for(;i>=0;i--)
{
FolderName[i]='\0';
}
break;
}
++i;
++mark;
}
menu();
break;
}
else if(order[mark]<=122&&order[mark]>=65)
{
while(1)
{
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -