文件目录管理与显示

文件目录管理与显示
给出目录和文件信息,编程实现将其排列成一棵有一定缩进的树。
要求:
(1)设计文件和目录信息树的存储结构。
(2)从文件或键盘输入目录和文件信息,输入格式采用绝对路径法,即:
\A
\A\AA1
\A\AA1\aa1.doc

创建时要检查同一路径下不能有同名的目录或文件名。
(3)设计文件和目录信息树的输出格式(以凹入表的形式显示)。
(4)查找指定目录和文件。
(5)添加新目录或新文件。
(6)删除指定目录或文件,子目录能够被删除的前提是其为空,既不包含任何子目录和文件;根目录不能删除。
(7)扩充目录或文件信息,如创建时间、读写权限、文件长度或子目录包含的子目录和文件数等。
(8)对同一层次下的子目录或文件按创建时间有序输出。
(9)通配符的使用。如用“?”代表任意一个字符,用“*”表示任意多个任意字符。
扩展内容:
实现相对路径表示法。

#include <stdio.h>  
#include <malloc.h>  
#include <string>  
#include <iostream>  
#include <sstream>  

using namespace std;  

#include "Sibtree.h"  

void add(SibTree *t1)  
{  
    printf("输入目录文件信息以输入0结束:\n");  
    SibTreeNode *r, *r1, *r2;  
    char ifm[1000] = { '\0' }, name1[50], name2[50];  
    char *str;  
    int i, j, n;  
    while (1)  
    {  
        cin >> ifm;  
        str = ifm;  
        if (*str == '0')break;  
        r = t1->root;  
        if (r == NULL)  
        {  
            for (i = 0, str += 1; *str != '\\'&&*str != '\0'; str++, i++)  
            {  
                name1[i] = *str;  
            }  
            name1[i] = '\0';  
            if (*str == '\0')insertRoot(t1, name1);  
            else  
                printf("%s的路径不存在,不能添加\n", name1);  
        }  
        else  
        {  
            for (i = 0, str += 1; *str != '\\'&&*str != '\0'; str++, i++)  
            {  
                name1[i] = *str;  
            }  
            name1[i] = '\0';  
            if (search(t1, name1) == 0 && *str == '\0')  
            {  
                insertnextSibing(t1, r, name1);  
            }  
            if (search(t1, name1) == 0 && *str != '\0')printf("%s的路径不存在,不能添加\n", name1);  
            r1 = LevelOrderTraverse(t1->root, name1);  
            while (r1 != NULL)  
            {  
                if (*str == '\0')break;  
                for (i = 0, str += 1; *str != '\\'&&*str != '\0'; str++, i++)  
                {  
                    name2[i] = *str;  
                }  
                name2[i] = '\0';  
                if (*str == '\0')  
                {  
                    if (insertChild(t1, r1, name2)){ break; }  
                }  
                else  
                {  
                    n = children(r1);  
                    for (j = 1; j <= n; j++)  
                    {  
                        if (strcmp(child(r1, j)->data, name2) == 0)break;  
                    }  
                    if (j <= n)r2 = child(r1, j);  
                    else r2 = NULL;  
                    if (r2 == NULL)printf("%s的路径不存在,不能添加\n", name2);  
                }  
                n = children(r1);  
                for (j = 1; j <= n; j++)  
                {  
                    if (strcmp(child(r1, j)->data, name2) == 0)break;  
                }  
                if (j <= n)r1 = child(r1, j);  
                else r1 = NULL;  
            }  
        }  
    }  
}  
void check(SibTree *t)  
{  
    SibTreeNode *r;  
    printf("输入要查找的文件名:");  
    char name[50];  
    cin >> name;  
    r = mohu1LevelOrderTraverse(t->root, name);  
    if (r == NULL)
        //printf("没有此文件\n");
        printf("\n");
    else  
    {  
        printf("此文件找到,创建时间为:");  
        printf("%d/%d/%d %d:%d:%d", r->year, r->month, r->day, r->hour, r->minute, r->second);  
        printf("\t子目录个数为:");  
        printf("%d\n", children(r));  
    }  
} 

void Delete(SibTree *t)  
{  
    SibTreeNode *r, *p, *kid;  
    printf("输入要删除的文件名:");  
    char name[50];  
    cin >> name;  
    r = LevelOrderTraverse(t->root, name);  
    if (r == NULL)printf("没有此文件!\n");  
    else  
    {  
        if (r->firstChild != NULL)printf("有子文件不能删除!\n");  
       
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值