




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、内含源代码,不懂可以百度消息给我多级文件目录管理实训报告-FileManager院别:计算机学院姓名:LDY学号:20110040xxxxxx班级:计Y11x 广西科技大学大学 计算机学院 Creation time: 2013-1-8 17:44:25目录1实验目的22实验内容22.1实验题目:树状多级文件目录管理系统22.2实验要求:功能实现23设计分析33.1数据结构分析:树形目录的存储、删除及树的显示33.2 数据结构定义73.3 功能分析和函数定义104 功能总览154.1 功能总览154.2主要功能155 实训总结195.1 所遇困难195.2 心得体会20841实验目的本次实训的
2、总体目的在于通过系统的编程训练,培养学生编写一个具有一定难度的小型系统的能力,培养学生从编写单个程序,实现单个程序功能到进行系统开发,整体调试的能力。从知识点的角度来说,目的在于通过本实训项目,让学生对链表或二叉树这一重要数据结构的运用更加熟练。2实验内容2.1实验题目:树状多级文件目录管理系统本次实训的题目是树状多级文件目录管理系统。要求利用数据结构的知识,采用链表的形式或通过将树转换为二叉树的概念,采用孩子兄弟二叉树的方式实现文件目录系统。不容许采用数据库实现文件管理。每个树结点表示一个文件(包括目录文件),成员基本信息可包含,文件名、文件属性、文件大小、文件创建时间,文件最后修改时间、文
3、件最后访问时间等信息。具体属性自行确定(注意:成员基本信息尽量与Window系统中文件具有的属性信息相同,以便对文件进行磁盘存取时保证文件的属性信息不丢失)。2.2实验要求:功能实现要求实现的总体基本功能包括:文件的创建和删除;文件夹的创建和删除;文件的读写和执行;文件的层次化显示;打开和关闭文件;显示目录下的文件;查找给定文件和目录;根据给定属性对文件进行排序;选做功能包括:将内存中的多级文件系统存储到磁盘中,将磁盘中某目录下的文件系统读入系统并回购多级目录系统。3设计分析3.1数据结构分析:树形目录的存储、删除及树的显示3.1.1存储结构:采用孩子兄弟二叉链表存储方式孩子兄弟表示法:又称二
4、叉树表示法,或二叉链表表示法。即以二叉链表作树的存储结构。链表中结点的两个链域分别指向该结点的第一个孩子结点和下一个兄弟结点,分别命名为firstchild域和nextsibling 域。- - - - -树的二叉链表(孩子-兄弟)存储表示- - - - -typedef struct CSNode ElemType data;struct CSNode *firstchild, * nextsibling;CSNode, *CSTree;RABCDEFGHK图3.1树的孩子兄弟表示方法实例图3.2 是图3.1 中的树的孩子兄弟链表。利用这种存储结构便于实现各种树的操作。首先易于实现找结点孩子
5、等的操作。例如:若要访问结点x 的第i 个孩子,则只要先从firstchild 域找到第1 个孩子结点,然后沿着孩子结点的nextsbling 域连续走i-1 步,便可找到x 的第i 个孩子. 当然,如果为每个结点增设一个PA RENT 域,则同样能方便地实现PARENT(T , x) 操作。RABCDEFBC图3.2 图3.1的孩子兄弟表示3.1.2基于二叉表的操作:新建、删除和显示等·新建(父目录指针为函数参数)·目录为空,在父目录的左孩子新建节点·目录不为空,在父目录下的最后兄弟(最后创建时间)新建节点挂在最后兄弟右兄弟上。根目录root21新建节点:目录为
6、空,放到双亲节点的左孩子3新建节点:目录不为空,放到同目录最后创建的的节点的右兄弟节点中4新建节点:同目录新建,同上父目录左孩子指针同层次右兄弟指针同层次右兄弟指针图3.3 孩子兄弟存储:新建文件夹/文件数字表示创建顺序实现:传递上级目录节点(父节点),判断父节点左孩子是否为空,为空则生成左孩子,不为空,则沿着左孩子的右兄弟寻找(将右兄弟作为链表移动到最后一个节点),直到遇到为最后兄弟,生成一个右兄弟挂在最后兄弟上。·删除(销毁)·单个文件,直接删除节点,释放内存·文件夹,删除文件夹下内容,注意要释放内存。根目录删除第一个节点:将左孩子树全部删除后(若为文件夹),
7、删除本身,最后将右兄弟连接到双亲的左孩子上删除文件夹:先删除左孩子d,再删除本身,将右兄弟e连接到左兄弟b上删除文件:直接删除dcabe图3.4 孩子兄弟存储:删除文件夹/文件实现:传递上级目录节点(父节点),判断父节点左孩子是否为空,为空时不用处理,不为空时用提供的名字(其它信息),在右兄弟组成的链表中(只看该目录下右指针相连的节点)寻找到要删除节点。以父目录指针的左孩子指针为链表第一个节点遍历,有两种情况:1第一个节点恰是删除节点判断该节点左孩子指针是否为空,为空则说明这是文件或文件夹下无内容,直接删除(释放内存),将右指针挂到父目录左孩子上。2第二个节点不是删除节点继续往该节点右指针遍历
8、,找到节点后判断该节点左孩子指针是否为空,为空则说明这是文件或文件夹下无内容,直接删除(释放内存),将右指针挂到上一个节点上。补充文件夹删除方法:采用后序删除,将删除节点的指针传递到递归后序删除函数,能将其下节点全部释放内存,最后将本身删除。(注意保存该节点的上一个兄弟和下一个兄弟,如果有)·显示:主要是二叉树的遍历问题引例:于下图的一棵孩子兄弟二叉树根目录eabdcf图3.5 二叉树的显示树形式表示根目录eabdcf第一层次第三层次第四层次图3.6 图3.5形成的树·层次显示:给出文件夹节点,遍历该节点右兄弟连接形成的单链表·第一层次(根目录层次,无分支情况):
9、给出根节点,左孩子节点作为该目录下第一个文件夹/文件,沿着其找遍右兄弟,直到不存在右兄弟为止(NULL)·第二层次(上图中,有三种分支):对于对于根目录下每个兄弟节点分别作为根节点,若存在左孩子,重新找遍节点下的右兄弟,直到找不到为止·第三层次:同上····注意:应当是每次都只能显示一个层次中某一目录(一个文件夹)下全部内容实现:给出一个文件夹作为目录根节点,判断其是否存在左孩子,存在则沿着左孩子的右兄弟链显示。·查找(关键在于取得其在树中的路径)遍历查找:递归先序查找关键字,找到后,列出属性等信息。其中获得其路径方法:1查
10、看双亲,自己是否是左孩子,若是,保存双亲名字,返回上一级,查看它的双亲是左孩子吗,是,则保存保存双亲的双亲,一路返回判断,直到遇到树根为止。(我没实现)2·path: path作为文件/文件夹的结构体的一个成员,保存的是每个节点的路径位置,因为生成节点时传递的是其上级父目录,而其父目录的路径path加上本身名字就是新节点的path,这是在生成时决定的,path在以后用处很多。3·parent:parent作为文件/文件夹的结构体的一个成员,保存的是每个节点的上级目录名字,不断返回将全部parent连接便是该节点路径。·目录返回:总体思想是用栈保存当前目录,保证在层
11、次间来回处理文件夹。(已实现)·返回上级目录出栈上级目录·选择下级目录入栈当前目录3.2 数据结构定义3.2.1 文件夹/文件结构定义:folder/file structurestructure Folder/Filename;attribute;size;creationTime;editTime;finalAccessTime;path;fileParent;leftChild;rightBrother;folder, file, pointer;·name变量:名字类型:char nameNAMESIZE;·attribute变量:属性类型:un
12、signed int attrib;- - - - -使用的是系统定义属性:unsigned attrib- - - - -·_A_ARCH(存档) ·_A_HIDDEN(隐藏) ·_A_NORMAL(正常) ·_A_RDONLY(只读) ·_A_SUBDIR(文件夹) ·_A_SYSTEM(系统) ·size变量:大小类型:long size;·creationTime;变量:创建时间·editTime;变量:修改时间·finalAccessTime变量:最后访问时间类型time struct
13、urestruct timeint year;int month;int day;int hour;int minute;int second;·path变量:路径类型:char pathPATHSIZE;说明:类似windows中的位置,在创建时,将上级路径与本身名字连接格式成串·fileParent变量:父母类型:File/folder structure pointer说明:出于确定路径的考虑,要想得到某文件夹/文件路径,只需向上获得双亲名字,但实际没有用到·leftChild变量:父母类型:File/folder structure pointer说明:指
14、向左孩子的指针·rightBrother变量:父母类型:File/folder structure pointer说明:指向右兄弟的指针3.2.2 保存当前目录栈结构定义:stack for store current director pointerstructure stackcurrentHander;top;bottom;·currentHander变量:当前指针类型:file/folder structure pointer currentHanderSTACKSIZE;说明:保存目录的堆栈·top变量:栈顶类型:int top;·bottom
15、变量:栈底类型:int bottom;3.2.3 信息结构定义:message structurestructure messageMsgType;·MsgType变量:消息类型:unsigned int MsgType;说明:模仿windows消息驱动机制的- - - - -消息类型定义- - - - -·message definition·Deal with file/ 处理文件夹/文件define NEWFILE0X006define NEWFOLDER0X007define DELETEF0X008define DISPLAY0X009define SE
16、ARCH0X00A ·Jump instruction/ 处理文件夹进入返回define BACK0X00Bdefine FORWARD0X00C ·Read or write file/ 处理文件读写define READFILE0X00Ddefine WRITEFILE0X00E ·Write or read DISC/ 处理磁盘读写define WDISC0X00Fdefine RDISC0X010 ·Exit/ 处理程序退出define HALF0X011 ·wait for instrutios/ 程序等待命令define WAIT0
17、X0123.2.4 函数状态定义·typedef int status;·define ERROR -1·define FAIL 0·define OK 13.2.5 常量定义constantdefine NAMESIZE128define PATHSIZE128define TIMESIZE128define STACKSIZE1283.3 功能分析和函数定义3.3.1 程序初始化(initialization)函数原型:status initFileManager(folderHandle *root, stack *FStack);参数:根目录节点
18、,堆栈指针说明:初始化根节点,将节点入栈保存部分代码:strcpy(*root)->name, FName);(*root)->attrib= _A_SUBDIR;(*root)->size= 0;(*root)->creationTime= getLocalTime();(*root)->editTime= initTime();(*root)->finalAccessTime= initTime();strcpy(*root)->path, FName);(*root)->fileParent= NULL;(*root)->leftCh
19、ild= NULL;(*root)->rightBrother= NULL;3.3.2 消息循环等待·获取消息函数原型:status getMessager(folderHandle currentRoot, MSG *message);参数:当前根目录节点,消息·处理消息函数原型:status dealWithMessage(folderHandle *root, folderHandle *currentRoot, MSG *message, stack *FStack);参数:根目录节点,当前目录节点,消息,保存目录栈说明:在当前目录下处理消息3.3.3 新建&
20、#183;新建文件夹函数原型:status createFolder(folderHandle parentFolder);参数:创建的的父目录指针·新建文件函数原型:status createFile(folderHandle parentFolder);参数:创建的的父目录指针说明:新建文件夹或文件的情况是一样的,之所以分开是因为,创建文件时要判断是否有同名文件,创建文件夹时要判断是否有同名文件夹,且创建文件时要输入文件的属性信息。实现:判断父节点左孩子是否为空,为空则生成左孩子,不为空,则沿着左孩子的右兄弟寻找(将右兄弟作为链表移动到最后一个节点),直到遇到为最后兄弟,生成一个
21、右兄弟挂在最后兄弟上。过程:输入名字,判断同名,分配内存,初始化文件/文件夹结构体,特别是左右指针置空,可以输入文件内容,两种存储方式,另外定义存储文本的数组,或新建文本保存,写入磁盘时复制,判断位置,成功挂上。3.3.4 删除函数原型:status deleteFiOrFo(folderHandle parentFolder);参数:要删除节点的父目录指针实现:判断父节点左孩子是否为空,为空时不用处理,不为空时用提供的名字(其它信息),在右兄弟组成的链表中(只看该目录下右指针相连的节点)寻找到要删除节点。以父目录指针的左孩子指针为链表第一个节点遍历,有两种情况:1第一个节点恰是删除节点判断该
22、节点左孩子指针是否为空,为空则说明这是文件或文件夹下无内容,直接删除(释放内存),并将右指针挂到父目录左孩子上。2第二个节点不是删除节点继续往该节点右指针遍历,找到节点后判断该节点左孩子指针是否为空,为空则说明这是文件或文件夹下无内容,直接删除(释放内存),并将右指针挂到上一个节点上。过程:输入名字,寻找匹配,判断位置,无左孩子删除,有左孩子调用删除文件夹的函数,将右兄弟挂到删除节点前的指针。删除文件夹:函数原型:status deleteFolder(folderHandle FoldHandle);parameter:要删除的节点的指针实现:采用递归后序删除函数,能将其下节点全部释放内存,
23、最后将本身删除。3.3.5 显示和查找·显示函数原型:status display(folder parentFolder); 参数:要显示的文件夹指针(父目录)实现:判断所给父目录左孩子是否为空,空则无内容,判断是文件或文件夹,输出时做区别,且统计文件夹与文件个数,此处模仿dos输出信息,还有大小等。说明:只能显示同一目录下全部内容过程:以父目录左孩子指针为起点,遍历右兄弟串成的链表,调用读取单个文件/文件夹信息函数,这是为了方便而分开函数功能。·查找函数原型:status searchF(folderHandle FRoot);参数:父目录先序遍历函数函数原型:stat
24、us searchTrave(folderHandle FRoot, char *FName);参数:父目录节点,查找名字3.3.6 获取文件夹/文件信息·读文件夹/文件信息函数原型:status readFInfo(folderHandle thisF, unsigned int readType);参数:文件夹/文件指针,读取类型说明:读取一个文件夹/文件的信息并输出3.3.7 进入/退出文件夹·进入文件夹函数原型:status forward(folderHandle *currentRoot, stack *Fstack);参数:当前目录,保存目录栈·退出
25、文件夹函数原型:status back(folderHandle *currentRoot, stack *Fstack);参数:当前目录,保存目录栈3.3.8 堆栈处理·入栈函数原型:status push(stack *Fstack, folderHandle currentHandle);·出栈函数原型:folderHandle pop(stack *Fstack);3.3.9 处理时间·获得本地时间函数原型:fileTime getLocalTime();·转换成结构体时间函数原型:char *formatTime(fileTime FTime)
26、;3.3.10 磁盘读写·读磁盘函数原型:status readVolumeToFM(folderHandle *fileRoot,folderHandle *currentRoot, stack *FStack);·写磁盘函数原型:status writeFMToVolume(folderHandle fileRoot);3.4 所需头文件·stdio.h·printf();·scanf();·fflush(stdin);·fopen();·fclose();·fputc();·fgetc()
27、;·getchar();·putchar();·FILE·EOF·malloc.h·malloc();·free();·stdlib.h·system();·itoa();·string.h·strcpy();·strcat();·strcmp();·time.h·time_t·tm·time();·localtime();·direct.h·_mkdir();·_getcwd
28、·_chdir();·_getdiskfree();·_diskfree_t·avail_clusters·sectors_per_cluster·bytes_per_sector·sys/stat.h·stat·st_size·io.h·_finddata_t·name·attrib·_A_SUBDIR·_A_NORMAL·_A_RDONLY·_A_SYSTEM·_A_HIDDEN·time_create
29、·time_write·time_access·_findfirst();·_findnext();·_findclose();4 功能总览4.1 功能总览图4.1 主界面4.2主要功能4.2.1新建文件图4.2新建文件4.2.2新建文件夹图4.3新建文件夹4.2.3 显示文件夹图4.4显示文件夹4.2.4 进入文件夹图4.5进入文件夹4.2.5 子文件夹新建图4.6 子文件夹新建4.2.6 子文件夹显示图4.7 子文件夹显示4.2.7返回上层目录图4.8 返回上层目录4.2.8 查找图4.9 查找4.2.9 删除后显示图4.10删除后显示4.
30、2.10 写入磁盘图4.11写入磁盘1图4.12写入磁盘24.2.11 读给定路径磁盘图4.13读给定磁盘5 实训总结5.1 所遇困难·字符串输入与返回由于我采用的是将输入信息作为一个函数,则要考虑名字等字符串的输入和返回,原来是将字符串的数组名返回,但无法获得输入名字,发现是函数出入栈原因,返回一个本地变量是不应该的,而且,用什么接收数组也是问题解决办法是,将输入信息存储在动态分配的堆中,然后返字符串首地址即可。·双重指针使用程序使用到很多双重指针,况且还有结构体等复杂数据类型,所以使用结构体内成员时*FHandle->name是错误的,因为->的优先级较高于
31、*,应加括号(*FHandle)->name·指向越界while(fileRightbrother)fileRightbrother = fileRightbrother->rightBrother;fileRightbrother->rightBrother = newFolder;这样使用时错误的,原因不确定fileRightbrother是否是存在不为空的指针域rightBrother。应该为:folderHandle fileRightbrother = parentFolder->leftChild;while(fileRightbrother-&g
32、t;rightBrother)fileRightbrother = fileRightbrother->rightBrother;fileRightbrother->rightBrother = newFolder;5.2 心得体会本次实训的总体目的在于通过系统的编程训练,编写一个具有一定难度的小型系统的能力,培养了我从编写单个程序,实现单个程序功能到进行系统开发,整体调试的能力。从知识点的角度来说,通过本实训项目,对链表或二叉树这一重要数据结构的运用更加熟练。源代码:/ FileManager.cpp/ Functions for FileManager/ Need Header
33、 file/#include "FileManager.h"#include <stdio.h>#include <malloc.h>#include <string.h>#include <time.h>#include <stdlib.h>#include <direct.h>#include <sys/stat.h>#include <io.h>/ Function definition/ Programming information and help/ Programm
34、ing informationvoid prgInfo(void)printf("FileManger0.0n");printf("<C> 2012/12 - 2012/12");printf("nn");/ Programming helpvoid needHelp(void)printf("%2d Clean screen and instruction promptnn", HELP);printf("%2d Create new filen", NEWFILE);printf
35、("%2d Create new foldern", NEWFOLDER);printf("%2d Deleten", DELETEF);printf("%2d Displayn", DISPLAY);printf("%2d for searchnn", SEARCH);printf("%2d Back upn", BACK);printf("%2d Go forwardnn", FORWARD);printf("%2d Read filen", READ
36、FILE);printf("%2d Write filenn", WRITEFILE);printf("%2d Write FileManage to driven", WDISC);printf("%2d Read drive to FileManagenn", RDISC);printf("%2d Exitn", HALF);/ Get instructions and to do/ Get messagestatus getMessager(folderHandle currentRoot, MSG *mes
37、sage)printf("n");printf("%s>", currentRoot->path);scanf("%d", &(message->MsgType);fflush(stdin);return OK;/ Deal with messagestatus dealWithMessage(folderHandle *root, folderHandle *currentRoot, MSG *message, stack *FStack)switch(message->MsgType)case HE
38、LP:system("cls");prgInfo();needHelp();break;case NEWFILE:createFile(*currentRoot);break;case NEWFOLDER:createFolder(*currentRoot);break;case DELETEF:deleteFiOrFo(*currentRoot);break;case DISPLAY:display(*currentRoot);break;case SEARCH:searchF(*root);break;case BACK:back(currentRoot, FStack
39、);break;case FORWARD:forward(currentRoot, FStack);break;case READFILE:readFile(*currentRoot);break;case WRITEFILE:writeFile(*currentRoot);break;case WDISC:writeFMToVolume(*root);break;case RDISC:readVolumeToFM(root, currentRoot, FStack);break;case HALF:return FAIL;break;default:printf("The inst
40、ruction is not recognized as an internal or external commandn");break;message->MsgType = WAIT;/ 防止输入错误时return OK;/ Deal with folder/file/ Initiliatize FileManagerstatus initFileManager(folderHandle *root, stack *FStack)if(!root)/ 根目录指针不存在,返回错误return ERROR;if(!(*root = (folderHandle)malloc(si
41、zeof file)/ 分配内存失败, 返回return FAIL;printf("Create the root director of FileManagern");char *FName = getFInfo();/ 初始化根目录strcpy(*root)->name, FName);(*root)->attrib= _A_SUBDIR;(*root)->size= 0;(*root)->creationTime= getLocalTime();(*root)->editTime= initTime();(*root)->final
42、AccessTime= initTime();strcpy(*root)->path, FName);(*root)->fileParent= NULL;(*root)->leftChild= NULL;(*root)->rightBrother= NULL;/ 初始化当前目录栈FStack->bottom = FStack->top = 0;_mkdir(FName);/ 创建临时文件目录, 目的是未将文件系统写入磁盘时能保存写入文件的内容system("cls");free(FName);return OK;/ Exit The Fi
43、leManagerstatus exitFileManager(folderHandle Root)/ 退出程序时将所有内存释放deleteFolder(Root);return OK;/ Create Folderstatus createFolder(folderHandle parentFolder)/ 新建目录前提是上级父目录存在if(!parentFolder)return ERROR;int flagSameName = 0;/ 同名标志folderHandle newFolder;/ 新建文件夹初始化if(! (newFolder = (folderHandle)malloc(s
44、izeof file)return FAIL;char *FName = getFInfo();/ 输入文件夹名字strcpy(newFolder->name, FName);newFolder->attrib= _A_SUBDIR;newFolder->size= 0;newFolder->creationTime= getLocalTime();newFolder->editTime= getLocalTime();newFolder->finalAccessTime= getLocalTime();strcpy(newFolder->path,
45、parentFolder->path);strcat(newFolder->path, "");strcat(newFolder->path, newFolder->name);newFolder->fileParent= parentFolder;newFolder->leftChild= NULL;newFolder->rightBrother= NULL;/ 检查上级父目录的左孩子是否存在if(!(parentFolder->leftChild)/ 父目录左孩子不存在,不存在同名问题,将新建文件挂在其左孩子上parent
46、Folder->leftChild = newFolder;else/ 父目录左孩子存在,找到该目录下最后创建孩子,将新建文件挂在右兄弟上folderHandle Rightbrother = parentFolder->leftChild;/ 产生指向当前节点指针if(!strcmp(Rightbrother->name, FName) && Rightbrother->attrib = _A_SUBDIR)/ 对第一个文件夹/文件判断,匹配名字,且这是一个文件夹,做同名标志flagSameName = OK;while(Rightbrother-&g
47、t;rightBrother && !flagSameName)/ 当前指针沿着右兄弟移动,如果已经到达最后节点,或者或者找到一个同名文件夹,结束移动Rightbrother = Rightbrother->rightBrother;if(!strcmp(Rightbrother->name, FName) && Rightbrother->attrib = _A_SUBDIR)/ 存在匹配名字,且这是一个文件夹,做同名标志flagSameName = OK;if(flagSameName = OK)/ 已存在同名文件夹, 不生成新文件夹,释放
48、内存,直接结束返回printf("nThe name is same!n");free(newFolder);free(FName);return FAIL;Rightbrother->rightBrother = newFolder;/ 可能存在同名文件,(但必须为文件指定类型,若无文件类型/ 操作系统不容许此文件与文件夹同名)但不存在同名文件夹, 将新文件夹挂在当前节点右兄弟_mkdir(newFolder->path);/ 新建文件目录是时在默认工作目录下(若已经写入磁盘,将在指定磁盘下创建文件夹)同时创建文件夹free(FName);return OK;
49、/ Create filestatus createFile(folderHandle parentFolder)/ 创建文件与创建文件夹时情况相当/ 新建文件前提是上级父目录存在if(!parentFolder)return ERROR;int flagSameName = 0;folderHandle newFile;/ 新建文件初始化if(! (newFile = (file*)malloc(sizeof file)return FAIL;char *FName = getFInfo();strcpy(newFile->name, FName);printf("文件属性:
50、 0 - 正常文件/ 1 - 只读文件: ");/ 只提供两个选项,无隐藏属性int inAttrib;scanf("%d", &inAttrib);if(inAttrib = 0)newFile->attrib= _A_NORMAL;elsenewFile->attrib= _A_RDONLY;newFile->size= 0;newFile->creationTime= getLocalTime();strcpy(newFile->path, parentFolder->path);strcat(newFile-&g
51、t;path, "");strcat(newFile->path, newFile->name);strcat(newFile->path, ".txt"); / 将生成的文件变成默认为txt文本文件,以免出现与文件夹重名问题newFile->fileParent= parentFolder;newFile->leftChild= NULL;newFile->rightBrother= NULL;/ 检查上级父目录的左孩子是否存在if(!(parentFolder->leftChild)/ 父目录左孩子不存在,将
52、新建文件挂在其左孩子上parentFolder->leftChild = newFile;else/ 父目录左孩子存在,找到该目录下最后创建孩子,将新建文件挂在右兄弟上file *Rightbrother = parentFolder->leftChild;if(!strcmp(Rightbrother->name, FName) && (Rightbrother->attrib = _A_NORMAL | Rightbrother->attrib = _A_RDONLY)flagSameName = OK;while(Rightbrother-&
53、gt;rightBrother && !flagSameName)Rightbrother = Rightbrother->rightBrother;if(!strcmp(Rightbrother->name, FName) && (Rightbrother->attrib = _A_NORMAL | Rightbrother->attrib = _A_RDONLY)flagSameName = OK;if(flagSameName = OK)printf("nThe name is same!n");free(newFile);return FAIL;Rightbrother->rightBrother = newFile;FILE *fp;if(!(fp = fopen(newFile->path, "w")printf("create file fail!n");printf("
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 八年级历史下册 第五单元 国防建设与外交成就 第16课 独立自主的和平外交教学实录 新人教版
- 企业职业卫生管理制度
- 统编版三年级数学上册教学计划(及进度表)
- 玩石头(教学设计)-2023-2024学年三年级下册综合实践活动沪科黔科版
- Unit 3 Sports Lesson2 Let's practice(教学设计)-2024-2025学年北师大版(三起)英语六年级上册
- mems内部的残余应力
- 电缆桥架国标10216-2013
- 2025年亚叶酸钙项目合作计划书
- 山西省平遥县高中数学 第三章 函数的应用 3.2 函数模型及其应用(1)教学实录 新人教A版必修1
- 班主任的工作职责与发展计划
- DB61∕T 1165-2018 高速公路服务区服务规范
- 2024人民医院医疗场所安保项目服务合同
- 2023年浙江宁波交投公路营运管理有限公司招聘考试真题
- 数字化井控技术研究现状及发展趋势
- 护理中断事件的风险及预防
- 农商行抵押合同范本
- 急性皮肤衰竭与压力性损伤鉴别
- 武汉市光谷实验中学2023-2024学年七年级下学期月考数学试题【带答案】
- 放射性元素的半衰期
- 2024-2029年中国金融服务外包行业发展分析及发展战略研究报告
- 殡葬行业风险分析报告
评论
0/150
提交评论