建立目录树
2015-12-08 18:41
435 查看
目录结构如下:
dir*: 表示目录
file*: 表示文件
字符’\t’的个数: 表示层级
文件名:dir_struct(需要与程序处于同一级目录下)
代码如下:
dir*: 表示目录
file*: 表示文件
字符’\t’的个数: 表示层级
文件名:dir_struct(需要与程序处于同一级目录下)
dir1 dir1 dir1 file1 file2 dir2 file1 file2 dir3 file1 dir4 dir1 dir1 dir1 dir1 file1 file1 file2 file3 dir2 dir1 file1 dir2 file1 file2 file3 file4 dir3 file1 file2 file3 file1 file1 file2 file3
代码如下:
#include <io.h> #include <stdio.h> #include <assert.h> // #include <direct.h> // vs 下使用 struct FileNode { char name[255]; FileNode *pParent; FileNode *pChild; FileNode *pNextBrother; }; void DestroyDirStruct(FileNode *node) { if (node == nullptr) return; DestroyDirStruct(node->pChild); DestroyDirStruct(node->pNextBrother); delete node; } int main() { char *filename = "dir_struct"; FileNode * DirStruct = nullptr; FileNode * pCurNode = nullptr; char name[255]; int level; int cur_level; int old = _dup(0); freopen(filename, "r", stdin); while (gets(name) != nullptr) { char *pch = name; while (*pch == '\t') ++pch; cur_level = pch-name; FileNode *node = new FileNode; memset(node, 0, sizeof(FileNode)); strcpy(node->name, pch); if (cur_level == 0) { DirStruct = node; } else { if (cur_level - level == 1) { pCurNode->pChild = node; node->pParent = pCurNode; } else if (cur_level - level == 0) { pCurNode->pNextBrother = node; node->pParent = pCurNode->pParent; } else if (cur_level - level < 0) { for (int i=level-cur_level; i>0; --i) pCurNode = pCurNode->pParent; pCurNode->pNextBrother = node; node->pParent = pCurNode->pParent; } else { assert(false); } } pCurNode = node; level = cur_level; } fclose(stdin); _dup2(old, 0); pCurNode = DirStruct; while (pCurNode) { if (strstr(pCurNode->name, "dir") != '\0') { mkdir(pCurNode->name); } else if (strstr(pCurNode->name, "file") != '\0') { fclose(fopen(pCurNode->name, "w")); } if (pCurNode->pChild!=nullptr) { chdir(pCurNode->name); pCurNode = pCurNode->pChild; } else if (pCurNode->pNextBrother != nullptr) { pCurNode = pCurNode->pNextBrother; } else { chdir(".."); pCurNode = pCurNode->pParent->pNextBrother; } } DestroyDirStruct(DirStruct); }
相关文章推荐
- Spring连接数据库的几种常用的方式
- 深刻理解Linux进程间通信(IPC)
- TCP三次握手
- PC-LINT
- linux安装及管理程序
- myeclipse生成方法注释的快捷键
- Flask中使用Mysql的几点记录 / flask-sqlalchemy
- linux线程的实现
- 12月8号报数字游戏
- SharePoint自动化系列——Create a local user and add to SharePoint
- Android AutoLayout全新的适配方式 堪称适配终结者
- Redis 集群方案
- linux进程PCB--task_struct
- Linux下面为Android Studio创建快捷方式即起动器
- Uva11464 开关问题
- 目录和文件管理(二)
- Python variable 作用域和初始化
- android项目获得手机里所有的应用程序
- Dojo Deferreds and Promises
- liunx目录和文件管理(一)