MFC dfs遍历文件
//如果涉及到大文件的遍历(大于4GB),可以将以下代码_finddata_t换成__finddata64_t,_findfirst换成_findfirst64,_findnext换成_findnext64
void dfsFolder(CString dirPath)
{
_finddata_t FileInfo;
CString tmp=dirPath;
if (tmp.Right(1) != "\\")
tmp += "\\";
CString strfind = tmp + "*";
long Handle = _findfirst(strfind, &FileInfo);
if (Handle == -1L)
{
//cerr << "can not match the folder path" << endl;
return ;
}
do{
//判断是否有子目录
if (FileInfo.attrib&_A_SUBDIR)
{
// 由于系统在进入一个子目录时,匹配到的头两个文件(夹)
// 是"."(当前目录),".."(上一层目录)。需要忽略掉这两种情况
if( (strcmp(FileInfo.name,".") != 0 ) &&(strcmp(FileInfo.name,"..") != 0))
{
//判断是否处理隐藏文件夹、系统文件夹
//if ((!(FileInfo.attrib&_A_HIDDEN)||PROC_HIDDEN)&&
// (!(FileInfo.attrib&_A_SYSTEM)||PROC_SYSTEM))
{
CString newPath = dirPath + "\\" + FileInfo.name;
//递归遍历更深层次的文件夹
dfsFolder(newPath);
}
}
}
else
{
CString fileSizeStr;
//文件大小
if (FileInfo.size/1024.0<1)
{
fileSizeStr.Format("%I64dB",FileInfo.size);
}
else if (FileInfo.size/(1024.0*1024.0)<1)
{
fileSizeStr.Format("%.2I64fKB",FileInfo.size/1024.0);
}
//最后修改文件的时间
CTime time(FileInfo.time_write);
CString timeStr = time.Format( "%Y/%m/%d %H:%M:%S" );
// 文件名字(包括后缀名)
CString nameExt(FileInfo.name);
int i=nameExt.ReverseFind('.');
CString name=nameExt.Left(i);
CString ext=nameExt.Mid(i+1);
}
}while (_findnext(Handle, &FileInfo) == 0);
_findclose(Handle);
}
---------------------------------------------------------------------------------
//以下代码可以复制带有子文件夹的文件夹
void dfsCopyFolder(CString srcPath, CString dstPath)
{
_finddata_t FileInfo;
CString tmp=srcPath;
if (tmp.Right(1) != "\\")
tmp += "\\";
CString strfind = tmp + "*";
long Handle = _findfirst(strfind, &FileInfo);
if (Handle == -1L)
{
//cerr << "can not match the folder path" << endl;
return ;
}
do{
//判断是否有子目录
if (FileInfo.attrib&_A_SUBDIR)
{
// 由于系统在进入一个子目录时,匹配到的头两个文件(夹)
// 是"."(当前目录),".."(上一层目录)。需要忽略掉这两种情况
if( (strcmp(FileInfo.name,".") != 0 ) &&(strcmp(FileInfo.name,"..") != 0))
{
//判断是否处理隐藏文件夹、系统文件夹
//if ((!(FileInfo.attrib&_A_HIDDEN)||PROC_HIDDEN)&&
// (!(FileInfo.attrib&_A_SYSTEM)||PROC_SYSTEM))
{
CString newSrcPath = srcPath + "\\" + FileInfo.name;
CString newDstPath = dstPath + "\\" + FileInfo.name;
if (!PathFileExists(newDstPath))//判断是否存在重名文件
{
//生成目标文件夹
if(!CreateDirectory(newDstPath,NULL))
{
//AfxMessageBox("创建文件夹失败!");
}
}
//递归遍历更深层次的文件夹
dfsCopyFolder(newSrcPath, newDstPath);
}
}
}
else
{
// 文件名字(包括后缀名)
CString nameExt(FileInfo.name);
int i=nameExt.ReverseFind('.');
CString name=nameExt.Left(i);
CString ext=nameExt.Mid(i+1);
CString srcFile=srcPath+"\\"+nameExt;
CString dstFile=dstPath+"\\"+nameExt;
BOOL b=CopyFile(srcFile, dstFile, false);//强行覆盖
if (!b)
{
//AfxMessageBox("复制"+srcFile+"文件失败!");
}
}
}while (_findnext(Handle, &FileInfo) == 0);
_findclose(Handle);
}
MFC dfs遍历文件的更多相关文章
- DFS遍历拷贝所有子文件夹及目录列表 (Java版)
如题 注意,文件夹是不能拷贝的, 需要mkdir的 文件选择合适的流进行拷贝 main测试方法 /** * 主测试类,默认将D:\\base01 下的复制到D:\\base02 * @param ar ...
- MFC拖拽、选择目录、遍历文件
1.选择目录 void CDecryptFileDlg::OnBnClickedSel() { std::wstring selectedDir; WCHAR szDir[MAX_PATH]; Zer ...
- 图之BFS和DFS遍历的实现并解决一次旅游中发现的问题
这篇文章用来复习使用BFS(Breadth First Search)和DFS(Depth First Search) 并解决一个在旅游时遇到的问题. 关于图的邻接表存储与邻接矩阵的存储,各有优缺点. ...
- MFC 与Excel文件的交互操作
假日快要结束了.带着沉重的心情写下之前关于MFC与Excel文件交互的总结. 因为VS的版本号不同可能在操作上有些差异.所以在此指明下本篇文章的project环境为VS2013,也建议大家用最新的. ...
- ORACEL上传BLOB,深度遍历文件夹
// uploadingDlg.cpp : 实现文件// #include "stdafx.h"#include "uploading.h"#include & ...
- C#遍历文件夹下所有文件
FolderForm.cs的代码如下: using System; using System.Collections.Generic; using System.Diagnostics; using ...
- windowsAPI遍历文件夹(速度高于递归)
#region API 遍历文件夹及其子文件夹和子文件 #region 声明WIN32API函数以及结构 ************************************** [DllImpo ...
- C# 遍历文件夹下所有子文件夹中的文件,得到文件名
假设a文件夹在F盘下,代码如下.将文件名输出到一个ListBox中using System.Data;using System.Drawing;using System.Linq;using Syst ...
- python 遍历文件夹 文件
python 遍历文件夹 文件 import os import os.path rootdir = "d:\data" # 指明被遍历的文件夹 for parent,dirn ...
随机推荐
- 学习笔记--函数式线段树(主席树)(动态维护第K极值(树状数组套主席树))
函数式线段树..资瓷 区间第K极值查询 似乎不过似乎划分树的效率更优于它,但是如果主席树套树状数组后,可以处理动态的第K极值.即资瓷插入删除,划分树则不同- 那么原理也比较易懂: 建造一棵线段树(权值 ...
- 【poj1015】 Jury Compromise
http://poj.org/problem?id=1015 (题目链接) 题意 随机挑选n个人作为陪审团的候选人,然后再从这n个人中选m 人组成陪审团.选m人的办法是:控方和辩方会根据对候选人的喜欢 ...
- BZOJ1016 最小生成树计数
Description 现在给出了一个简单无向加权图.你不满足于求出这个图的最小生成树,而希望知道这个图中有多少个不同的最小生成树.(如果两颗最小生成树中至少有一条边不同,则这两个最小生成树就是不同的 ...
- bzoj1670 Usaco2006 Building the Moat护城河的挖掘 [凸包模板题]
Description 为了防止口渴的食蚁兽进入他的农场,Farmer John决定在他的农场周围挖一条护城河.农场里一共有N(8<=N<=5,000)股泉水,并且,护城河总是笔直地连接在 ...
- ExtJS入门教程01,Window如此简单,你怎能不会?
这是一系列ExtJS教程,今天的是第一篇,主要介绍ExtJS中Window的基本用法.希望大家能够支持! 来吧,创建一个漂亮的弹出窗 var win = Ext.create("Ext.Wi ...
- Linq 中 Distinct 方法扩展
原文链接 http://www.cnblogs.com/A_ming/archive/2013/05/24/3097062.html public static class LinqEx { publ ...
- WAMP 403 Forbidden禁止访问
WAMP .5修改方法 修改httpd.conf文件 # onlineoffline tag - don't remove Require local To # onlineoffline tag - ...
- How much training data do you need?
How much training data do you need? //@樵夫上校: 0. 经验上,10X规则(训练数据是模型参数量的10倍)适用与大多数模型,包括shallow networ ...
- xcrun: error: active developer path ("/Volumes/Xcode/Xcode-beta.app/Contents/Developer") does not exist, use `xcode-select --swi
xcrun: error: active developer path ("/Volumes/Xcode/Xcode-beta.app/Contents/Developer") d ...
- 锋利的jQuery-3--$()创建节点
创建节点可以用jquery的工厂函数,$() $() 会根据传入的html标记字符串,创建一个dom对象,并将这个dom对象包装成一个jquery对象后返回. var li_1 = $("& ...