• 大小: 14KB
    文件类型: .cpp
    金币: 2
    下载: 1 次
    发布日期: 2021-06-18
  • 语言: C/C++
  • 标签: 课程设计  

资源简介

主要用于课程设计完成文件系统模拟,内含详细可运行代码

资源截图

代码片段和文件信息

#include
#include
#include
#include 
using namespace std;

char msg[] =“/“;//声明字符串,后面调用,防止char*内存错误 
struct TreeNode {//树节点
struct TreeNode *parent;//父指针
struct TreeNode *FirstChild;//第一个儿子指针
struct TreeNode *xiongdi;//兄弟指针
bool flag_file;//true表示文件,false表示目录
char fileName[100];//文件名
int depth;//深度
int size;//子文件数目
};
typedef struct TreeNode *Position;//为了使用方便
typedef struct TreeNode *Tree;
typedef struct TreeNode *ptr;

class CatalogTree;
void cd_Position(CatalogTree *a Position x);//根据位置寻找路径
void deletePtr(CatalogTree *a ptr t);//根据位置删除

class CatalogTree {

public:
TreeNode *root;
ptr currentPosition;
public:
CatalogTree();//构造函数
~CatalogTree() {//析构函数
deletePtr(this root);
};
void mkdir(char *name Position t);//创建目录
void mkfile(char *name Position t);//创建文件
void ListDir();//列出当前目录下的文件
void Delete(char *str);//删除文件或目录
void cd();//打印当前路径
void cdStr(char *str);//跳到指定路径
void cdPre();//跳到父路径
void save(char *filename);//将目录结构保存至文件
void load(char *filename);//将目录结构从文件载入
void ListDirToFile(Position D int Depth FILE *file);//从文件打印出目录结构
void size(char *dirName);//打印当前目录下的文件个数

};


CatalogTree::CatalogTree()
{ //构造方法
ptr m_root = (struct TreeNode*)malloc(sizeof(struct TreeNode));
m_root->FirstChild = NULL;
memset(m_root->fileName 0 sizeof(m_root->fileName));
m_root->fileName[0] = ‘/‘;
m_root->flag_file = false;
m_root->parent = NULL;
m_root->xiongdi = NULL;
m_root->size = 0;
root = m_root;
currentPosition = root;

};


void CatalogTree::size(char *dirName) {//打印出当前路径下某目录的文件数

Position t;
bool flag = false;
for (t = currentPosition->FirstChild; t != NULL; t = t->xiongdi) {
if (strcmp(t->fileName dirName) == 0) {
flag = true;
break;
}
}

if (strcmp(dirName “/“) == 0) flag = true;

if (flag == false) {
printf(“ 没有该目录或文件\n“);
return;
}

if (strcmp(dirName “/“) == 0)//打印根目录的文件数
printf(“size of %s : %d\n“ dirName root->size);
else
printf(“size of %s : %d\n“ dirName t->size);

}

void  CatalogTree::ListDirToFile(Position D int Depth  FILE *file)//从文件打印出目录结构
{
ptr temp;
if (D!=NULL) {
for (int i = 0; i < Depth; i++) {
fprintf(file  “\t“);
}
if (D->flag_file == true) {
//printf(“%s .f\n“ D->fileName);
fprintf(file “%s .f\n“ D->fileName);
}

else {
//printf(“%s .d\n“ D->fileName);
fprintf(file “%s .d\n“ D->fileName);
}

if (D->flag_file == false)
for (temp = D->FirstChild; temp != NULL; temp = temp->xiongdi)
ListDirToFile(temp Depth + 1  file);
}
}


void CatalogTree::save(char *filename) {//将目录结构保存至文件
FILE* file = fopen(filename “w“);
if (file == NULL) {
printf(“ 文件打开失败\n“);
return;
}
ListDirToFile(this->root 0  file);//将目录结构存入文件
fclose(file);
//printf(“ 保存文件成功\n“);
}



void  ListFileToTree(CatalogTree *T  Position D char preDir[] int preDepth FI

评论

共有 条评论