zoukankan      html  css  js  c++  java
  • 非递归方式遍历文件夹,取得所有子目录和文件的文件名和大小

    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();
    		}
    	}
    
    
    
    }
    

      

  • 相关阅读:
    数据库面试题
    网络编程_TCP协议_客户端与服务端
    29-街道最短路径问题(哈曼顿距离)
    60-安慰奶牛(最小生成树)
    20-集合问题(并查集)
    59-算法训练 操作格子 (线段树)
    58-最小乘积(基本型)
    11-vector的使用
    20-取石子动态规则(hdu2516 斐波那契博弈)
    19-格子游戏(hdu2147博弈)
  • 原文地址:https://www.cnblogs.com/csuchao/p/4581429.html
Copyright © 2011-2022 走看看