c语言编写一个虚拟文件管理系统

使用c语言编写一个虚拟文件管理系统。可以用数据库,XML格式,TXT文本作为存储格式。要求有文件操作的基本功能,有建立,删除,移动,修改文件名和目录名的功能。
试用例题,

img

 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
 
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
 
/******************分割线**********************/ 
typedef struct Y_Filestruct
{
    char name [20];
    char creator[10];
    int size ;
    struct Y_Filestruct *NextFile;
    struct Y_FolderStruct*ParentFolder;
    char location[20];
    
}Y_File;
 
typedef struct Y_FolderStruct
{
    char name[20];
    struct Y_FolderStruct *NextFolder,*FirstChild;
    struct Y_FolderStruct *ParentFolder;
    Y_File *FirstFile;
    int size;//子文件数目 
}Y_Folder;
/******************分割线**********************/ 
Y_Folder *current_Folder;//当前所在的文件夹 
Y_File *current_File;//当前所在的文件 
Y_Folder *root;
/******************分割线**********************/ 
void system_init()
{
    printf("/**********************************/\n***********文件管理系统**********\n");
    printf("*************功能选择************\n");
    printf("/*1 创建文件夹\n");
    printf("/*2 创建文件(在当前文件夹下)  \n");
    printf("/*3 浏览当前路径及文件\n");
    printf("/*4 返回上级文件夹  \n");
    printf("/*5 返回上级文件夹(子文件夹)  \n"); 
    printf("/*6 创建兄弟文件夹\n"); 
    printf("/*0 退出系统  \n"); 
    printf("/**********************************/\n");
    
}
 
 
Y_Folder *CreateFolder(Y_Folder*pParentFolder)
{
    Y_Folder *fldNew = (Y_Folder*)malloc(sizeof(Y_Folder));
    Y_Folder *fldPre = (Y_Folder*)malloc(sizeof(Y_Folder));
    printf("You are craeting a Folder,please enter the Folder name:\n");
    gets(fldNew->name);
    fldNew->FirstFile = NULL;
    fldNew->FirstChild = NULL;
    fldNew->NextFolder = NULL;
    if (pParentFolder != NULL)
    {
        fldPre = pParentFolder->FirstChild;
        
        if(fldPre == NULL)
        {
            pParentFolder ->FirstChild = fldNew;
            
        }
        else
        {
            while(fldPre->NextFolder != NULL)
            {
                fldPre = fldPre->NextFolder;
            }
                
            fldPre->NextFolder = fldNew;
        }
    }
 
    fldNew->ParentFolder = pParentFolder;
    free(fldPre);
    printf("You have creat the folder successfully!:%s \nwhich's father is%s\n",fldNew->name,fldNew->ParentFolder->name);
    
    return fldNew;
}
 
Y_Folder *Create_NextFolder(Y_Folder*pParentFolder)
{
    Y_Folder *fldNew = (Y_Folder*)malloc(sizeof(Y_Folder));
    Y_Folder *fldPre = (Y_Folder*)malloc(sizeof(Y_Folder));
    printf("You are craeting the sister Folder,please enter the Folder name:\n");
    gets(fldNew->name);
    fldNew->FirstFile = NULL;
    fldNew->FirstChild = NULL;
    fldNew->NextFolder = NULL;
    if (pParentFolder != NULL)
    {
        fldPre = pParentFolder;
        while(fldPre->NextFolder != NULL)
        {
            fldPre = fldPre->NextFolder;
        }    
        fldPre->NextFolder = fldNew;
    
    }
 
    fldNew->ParentFolder = pParentFolder->ParentFolder;
    free(fldPre);
    printf("You have creat the folder successfully!:%s \n which's father is%s \n,which's sister's Fodler is: %s \n",fldNew->name,fldNew->ParentFolder->name,pParentFolder->name);
    
    return fldNew;
}
 
 
Y_Folder *Root_init()
{
    Y_Folder *root = (Y_Folder*)malloc(sizeof(Y_Folder));
    
    root->ParentFolder =NULL;
    root->FirstFile = NULL;
    printf("please enter the root's name\n");
    gets(root->name);
    root->NextFolder = NULL;
    root->size = 0;
    return root;
}
 
Y_File *Creat_File(Y_Folder*Folder_now)
{
    Y_File *fnew = (Y_File*)malloc(sizeof(Y_File));
    Y_File *fpre  = (Y_File*)malloc(sizeof(Y_File));;
    fnew->NextFile = NULL;
    if(Folder_now == NULL)
    {
        printf("还未创建文件夹,请创建文件夹后再创建文件\n");
        return NULL;
    }
    else
    {
        printf("You are craeting a File,please enter the File name:\n");
        gets(fnew->name);
        printf("please enter the File's creator:\n");
        gets(fnew->creator);
        printf("please enter the File's size\n");
        scanf("%d",&fnew->size);
        Folder_now->size++; 
        for(int j =0;j<20;j++)
        {
            fnew->location[j] = Folder_now->name[j];
        }
    }
    if (Folder_now->FirstFile == NULL)
    {
        Folder_now->FirstFile = fnew;
    }
    else
    {
        fpre = Folder_now->FirstFile;
        while(fpre->NextFile != NULL)
            fpre = fpre->NextFile;
        fpre->NextFile = fnew;
    }
    Folder_now->size++;
    return fnew;
    
}
 
 
void print_Fileroot(Y_Folder*Folder_now)
{
    if (Folder_now!=NULL)
    {
        printf("%s",Folder_now->name);
        print_Fileroot(Folder_now->FirstChild);
    }
    return;    
}
void print_File_inf(Y_File * fl)
{
    
}
void print_Filenum(Y_Folder*Folder_now)
{
    printf("the file num of the Folder is :%d\n",Folder_now->size);
    return;
}
 
Y_Folder* goback(Y_Folder*now_Folder)
{
    Y_Folder *pre= (Y_Folder*)malloc(sizeof(Y_Folder));
    if(now_Folder->ParentFolder!=NULL)
    {
        pre = now_Folder->ParentFolder;
        printf("you have go back to the last folder successfully!\n");
        printf("the folder's name is:%s\n",now_Folder->ParentFolder->name);
    }
    else
    {
        printf("there is no folder\n");
    }
    return pre;
}
 
void compare_sp(char *sp,char a[])
{
    int size = sizeof(sp);
    for (int l=0;l<size;l++)
    {
        
    }
}
 
int main ()
{
    int acc;
    int i =0;
    int j = 0;//子文件夹 
    int imax =0; 
    int jmax = 0;//子文件夹最大数量
    int fn = 0;
    int fmax =0;  
    char *sp;
    sp = (char*)malloc(sizeof(char));
    Y_Folder *fds[6];
    Y_Folder *fds_next[6];
    Y_File *f[6];
    fds[i]=CreateFolder(NULL);
    system_init();
    scanf("%d",&acc);
    fflush(stdin);
    while(acc!= 0)
    {
        switch(acc)
        {
            case 1:
                printf("you are going to creat a folder\n");
                fds[i+1] = CreateFolder(fds[i]);
                current_Folder = fds[i+1];
                i++;
                imax++;
                printf("current_folder:%s \nremain folders:%d\n",fds[i]->name,6-i);
                printf("enter the next step :\n");
                scanf("%d",&acc);
                fflush(stdin);
            break;
            case 2://创建文件 
                printf("you are going to creat a file\n");
                f[fn] = Creat_File(fds[i]);
                fn++;
                printf("current_folder:%s\n",fds[i]->name);
                printf("enter the next step :\n");
                scanf("%d",&acc);
                fflush(stdin);                
            break;
            case 3://打印文件夹 
                for (int k =0;k<=imax;k++)
                {
                    if(fds[k]->FirstChild!=NULL)
                    {
                        printf("%s(Folder)->",fds[k]->name);
                    }
                    else
                    {
                        printf("%s(Folder)\n",fds[k]->name);
                    }
                
                }
                if(jmax!=0)
                {
                    printf("子文件夹和父文件夹显示:\n");
                    for (int k =0;k<=jmax;k++)
                    {
                        if(fds_next[k]->FirstChild!=NULL)
                        {
                            printf("%s->",fds_next[k]->name);
                        }
                        else
                        {
                            printf("%s\n",fds_next[k]->name);
                        }
                    
                    }
                }
                if(f!=0)
                {
                    printf("子文件显示\n");
                    for (int o =0;o<fn;o++)
                    {
                        if(f[o]!=NULL)
                        {
                            printf("%s(folder)->%s(file)\n",f[o]->location,f[o]->name);
                        }
                    
                    }
                }
                printf("enter the next step :\n");
                scanf("%d",&acc);
                fflush(stdin);
            break;
            case 4:
                printf("you are going to bo back to the last folder:\n",fds[i-1]->name);
                i-=1;
                if(i<0)
                {
                    i=0;
                }
                printf("current_folder:%s\n",fds[i]->name);
                printf("enter the next step :\n");
                scanf("%d",&acc);
                fflush(stdin);
            break;
            case 5:// 
                printf("you are going to bo back to the last folder:\n",fds_next[j-1]->name);
                j-=1;
                current_Folder = fds_next[j];
                if(j<0)
                {
                    j=0;
                }
                printf("current_folder:%s\n",fds[i]->name);
                printf("enter the next step :\n");
                scanf("%d",&acc);
                fflush(stdin);
            break;
            case 6:
                printf("you are going to build the child folder,which's sister Folder is:\n",fds[i]->name);
                fds_next[j] = Create_NextFolder(fds[i]);
                current_Folder = fds_next[j];
                j++;
                jmax++;
                printf("enter the next step :\n");
                scanf("%d",&acc);
                fflush(stdin);
            break;
            default:
                printf("please enter again:\n");
                scanf("%d",&acc);
            break;
        }
    }
    return  0; 
}

https://blog.csdn.net/waibibabO_/article/details/124252686