非递归方式遍历文件夹,取得所有子目录和文件的文件名和大小

void BuildTree()
{
	FileNode nodeD;
	nodeD.fileName = _T("D");
	nodeD.fileSize = 15;

	FileNode nodeE;
	nodeE.fileName = _T("E");
	nodeE.fileSize = 10;

	FileNode nodeF;
	nodeF.fileName = _T("F");
	nodeF.fileSize = 20;

	FileNode nodeG;
	nodeG.fileName = _T("G");
	nodeG.fileSize = 5;

	FileNode nodeB;
	nodeB.fileName = _T("B");
	nodeB.fileSize = 0;
	nodeB.subFiles.push_back(nodeD);
	nodeB.subFiles.push_back(nodeE);

	FileNode nodeC;
	nodeC.fileName = _T("C");
	nodeC.fileSize = 0;
	nodeC.subFiles.push_back(nodeF);
	nodeC.subFiles.push_back(nodeG);

	FileNode nodeA;
	nodeA.fileName = _T("A");
	nodeA.fileSize = 0;
	nodeA.subFiles.push_back(nodeB);
	nodeA.subFiles.push_back(nodeC);

	list<pair<FileNode*, FileNode*> > findFolder;
	findFolder.push_back(make_pair(&nodeA, (FileNode*)NULL));

	FileNode* preNode = NULL;
	list<FileNode>::iterator pos;
	while (!findFolder.empty())
	{
		FileNode* node = findFolder.back().first;
		FileNode* parent = findFolder.back().second;
		if (!node->subFiles.empty() && &(*(node->subFiles.begin())) != preNode)
		{
			for (pos = node->subFiles.begin(); pos != node->subFiles.end(); ++pos)
			{
				findFolder.push_back(make_pair(&(*pos), node));
			}
		}
		else
		{
			// 访问该节点
			if (parent)
			{
				parent->fileSize += node->fileSize;
			}

			preNode = node;
			findFolder.pop_back();
		}
	}

}

  

时间: 2024-09-29 07:14:50

非递归方式遍历文件夹,取得所有子目录和文件的文件名和大小的相关文章

非递归方式遍历二叉树

/** * 非递归方式的先根序 * @param root */ public static void preOrder(Node root){ Stack<Node> stack = new Stack<Node>(); while (!stack.isEmpty() || root != null) { while (root != null) { System.out.println(root.data); stack.push(root); root = root.left

java复制文件夹及所有子目录和文件

package text; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStrea

C# 判断文件夹存在与否并创建文件夹

protected void Button1_Click(object sender, EventArgs e) { if (Directory.Exists(Server.MapPath("~/upimg/hufu")) == false)//如果不存在就创建file文件夹 { Directory.CreateDirectory(Server.MapPath("~/upimg/hufu")); } //Directory.Delete(Server.MapPath

二叉树(3)----后序遍历,递归和非递归方式

1.二叉树定义 typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.后序遍历 定义: 给定根节点,首先遍历左子树,然后遍历右子树,最后

数据结构 递归和非递归方式实现二叉树先序、中序和后序遍历

二叉树的先序遍历顺序是根.左.右:中序遍历顺序是左.根.右:后序遍历顺序是左.右.根. 递归方式实现如下: 1 public class TreeNode { 2 private int value; 3 private TreeNode left, right; 4 5 public TreeNode(int data) { 6 value = data; 7 } 8 9 // 递归方式实现先序遍历 10 public void preorder(TreeNode treeNode) { 11

Java使用线程池递归压缩文件夹下面的所有子文件

本文将介绍Java中利用线程池递归的方式压缩文件夹下面的所有子文件,具体方法如下: Gzip单个文件压缩 对于单个文件使用GZip压缩. package date0805.demo1; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream

二叉树(11)----求二叉树的镜像,递归和非递归方式

1.二叉树定义: typedef struct BTreeNodeElement_t_ { void *data; } BTreeNodeElement_t; typedef struct BTreeNode_t_ { BTreeNodeElement_t *m_pElemt; struct BTreeNode_t_ *m_pLeft; struct BTreeNode_t_ *m_pRight; } BTreeNode_t; 2.求二叉树镜像 比如: A                    

【LeetCode-面试算法经典-Java实现】【144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)】

[144-Binary Tree Preorder Traversal(二叉树非递归前序遍历)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Given a binary tree, return the preorder traversal of its nodes' values. For example: Given binary tree {1,#,2,3}, 1 2 / 3 return [1,2,3]. Note: Recursive solution

Ant步步为营(5)用for和foreach的方法遍历一个文件夹,查找到某个文件并删除

今天有个任务是要删除VM上的某个文件夹下的两个jar包.不过这个任务没有分配给我,而是分配给俺的师傅,哈哈.不过我还是自己动手写了一些脚本在本地模拟一下删除某个指定文件. build.xml <?xml version="1.0"?>    <project name="ForTest" default="build" >    <property file="build.properties"&