VC遍历文件夹

合集下载

Visual C++遍历本地磁盘所有文件夹代码

Visual C++遍历本地磁盘所有文件夹代码

【例Ex_Tree】遍历本地磁盘所有的文件夹①用MFC AppWizard创建一个默认的单文档应用程序Ex_Tree,但在创建的第6步将视图的基类选择为CTreeView。

②为CEx_TreeView类添加下列成员变量:class CEx_TreeView : public CTreeView{public:CImageList m_ImageList;CString m_strPath; // 文件夹路径③为CEx_TreeView类添加成员函数InsertFoldItem,其代码如下:void CEx_TreeView::InsertFoldItem(HTREEITEM hItem, CString strPath){CTreeCtrl& treeCtrl = GetTreeCtrl();if (treeCtrl.ItemHasChildren(hItem)) return;CFileFind finder;BOOL bWorking = finder.FindFile(strPath);while (bWorking){bWorking = finder.FindNextFile();if (finder.IsDirectory() && !finder.IsHidden() && !finder.IsDots())treeCtrl.InsertItem(finder.GetFileTitle(), 0, 1, hItem, TVI_SORT);}}④为CEx_TreeView类添加成员函数GetFoldItemPath,其代码如下:CStringCEx_TreeView::GetFoldItemPath(HTREEITEM hItem) {CString strPath, str;strPath.Empty();CTreeCtrl& treeCtrl = GetTreeCtrl();HTREEITEM folderItem = hItem;while (folderItem) {int data = (int)treeCtrl.GetItemData( folderItem );if (data == 0)str = treeCtrl.GetItemText( folderItem );elsestr.Format( "%c:\\", data );strPath = str + "\\" + strPath;folderItem = treeCtrl.GetParentItem( folderItem );}strPath = strPath + "*.*";return strPath;}⑤用ClassWizard为CEx_TreeView类添加TVN_SELCHANGED(当前选择节点改变后)消息处理,并增加下列代码:void CEx_TreeView::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult){NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;HTREEITEM hSelItem =pNMTreeView->itemNew.hItem; // 获取当前选择的节点CTreeCtrl& treeCtrl = GetTreeCtrl();CString strPath = GetFoldItemPath( hSelItem );if (!strPath.IsEmpty()){InsertFoldItem(hSelItem, strPath);treeCtrl.Expand(hSelItem,TVE_EXPAND);}*pResult = 0;}⑥在CEx_TreeView::PreCreateWindow函数中添加设置树控件样式代码:BOOLCEx_TreeView::PreCreateWindow(CREATESTRUCT& cs) {cs.style |= TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTONS;return CTreeView::PreCreateWindow(cs);}⑦在CEx_TreeView::OnInitialUpdate函数中添加下列代码:void CEx_TreeView::OnInitialUpdate(){CTreeView::OnInitialUpdate();CTreeCtrl& treeCtrl = GetTreeCtrl();m_ImageList.Create(16, 16, ILC_COLOR8|ILC_MASK, 2, 1);m_ImageList.SetBkColor( RGB( 255,255,255 ));// 消除图标黑色背景treeCtrl.SetImageList(&m_ImageList,TVSIL_ NORMAL);// 获取Windows文件夹路径以便获取其文件夹图标CString strPath;GetWindowsDirectory((LPTSTR)(LPCTSTR)strP ath, MAX_PATH+1);// 获取文件夹及其打开时的图标,并添加到图像列表中SHFILEINFO fi;SHGetFileInfo( strPath, 0, &fi, sizeof(SHFILEINFO),SHGFI_ICON | SHGFI_SMALLICON );m_ImageList.Add( fi.hIcon );SHGetFileInfo( strPath, 0, &fi, sizeof(SHFILEINFO),SHGFI_ICON | SHGFI_SMALLICON | SHGFI_OPENICON );m_ImageList.Add( fi.hIcon );// 获取已有的驱动器图标和名称CString str;for( int i = 0; i < 32; i++ ){str.Format( "%c:\\", 'A'+i );SHGetFileInfo( str, 0, &fi, sizeof(SHFILEINFO),SHGFI_ICON | SHGFI_SMALLICON | SHGFI_DISPLAYNAME);if (fi.hIcon) {int nImage = m_ImageList.Add( fi.hIcon );HTREEITEM hItem = treeCtrl.InsertItem( fi.szDisplayName, nImage, nImage );treeCtrl.SetItemData( hItem, (DWORD)('A'+i));}}}⑧编译并运行,结果如图13.12所示。

VC 浏览本地文件夹、文件

VC 浏览本地文件夹、文件

if(FDlg.DoModal() == IDOK)
{
filePath = FDlg.GetPathName();
UpdateData(false);
filePath.Replace("\\","\\\\");
{
int nCount = 0;
POSITION pos = dlg.GetStartPosition();
CStrinOC lpMalloc;
if(FAILED(SHGetMalloc(&lpMalloc)))
return;
lpMalloc->Free(pIDList);
lpMalloc->Release();
}
CFileDialog文件选择对话框的使用:
首先构造一个对象并提供相应的参数,构造函数原型如下:
CFileDialog::CFileDialog(
BOOL bOpenFileDialog, //为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框
LPCTSTR lpszDefExt = NULL, //默认的文件扩展名
LPCTSTR lpszFileName = NULL, //默认的文件名
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, //设定风格
//初始化入口参数bi开始
bi.hwndOwner = NULL;
bi.pidlRoot =NULL;//初始化制定的root目录很不容易,
bi.pszDisplayName = Buffer;//此参数如为NULL则不能显示对话框

Visual C++遍历本地磁盘所有文件夹代码

Visual C++遍历本地磁盘所有文件夹代码

SHGFI_ICON | SHGFI_SMALLICON |
SHGFI_DISPLAYNAME);
if (fi.hIcon) {
int
nImage
=
m_ImageList.Add( fi.hIcon );
HTREEITEM
hItem
=
treeCtrl.InsertItem( fi.szDisplayName, nImage,
【例 Ex_Tree】遍历本地磁盘所有的文件夹
①用 MFC AppWizard 创 建 一 个 默 认 的 单 文 档 应 用 程 序
Ex_Tree,但在创建的第 6 步将视图的基类选择为 CTreeView。
②为 CEx_TreeView 类添加下列成员变量:
class CEx_TreeView : public CTreeView
}
⑤用 ClassWizard 为 CEx_TreeView 类 添 加
TVN_SELCHANGED(当前选择节点改变后)消息处理,并增加下列
代码:
void CEx_TreeView::OnSelchanged(NMHDR* pNMHDR,
LRESULT* pResult)
{
NM_TREEVIEW*
else
str.Format( "%c:\\", data );
strPath = str + "\\" + strPath;
folderItem
=
treeCtrl.GetParentItem( folderItem );
}
strPath = strPath + "*.*";

C语言实现文件的遍历

C语言实现文件的遍历

C语⾔实现⽂件的遍历考虑⼀下步骤判断命令⾏参数,获取需要查询的⽬录argv[1], 如果没有就算当⽬录判断⽤户指定的是否是⽬录。

stat S_ISDIR();读取⽬录:opendir()readdir(), 如果读取到⽬录,那么就可以递归调⽤⾃⼰拼接⽬录: sprintf(path, "%s/%s", dir, d_name);closedir()递归⽬录的实现#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/stat.h>#include <dirent.h>#include <pthread.h>void is_file(char *name){int ret = 0;struct stat sb;ret = stat(name, &sb);if(ret==-1){perror("stat error");return;}if (S_ISDIR(sb.st_mode)){read_dir()}printf("%s\t%b\n", name, sb.st_size);return ;}void read_dir(char *dir){char path[256];DIR *dp;struct dirent *sdp;dp = opendir(dir);if (dp==NULL){perror("opendir error");return;}while(readdir(sdp = readdir(dp))!= NULL){// 先进⾏⽬录的拼接if(strcmp(sdp->d_name, ".") == 0 !! strcmp(sdp->d_name, "..")==0){continue;}sprintf(path, "%s/%s", dir, sdp->d_name);is_file(path);}closedir(dp);return;}int main(int argc, char* argv[]) {if (argc==1){is_file(".");}else{is_file(argv[1]);}}。

两种方法使用VC遍历文件夹下所有文件和文件夹

两种方法使用VC遍历文件夹下所有文件和文件夹

两种方法使用VC遍历文件夹下所有文件和文件夹1.使用网上最普通的方法find(char * lpPath){char szFind[MAX_PATH];WIN32_FIND_DATA FindFileData;strcpy(szFind,lpPath);strcat(szFind,"*.*");HANDLE hFind=::FindFirstFile(szFind,&FindFileData);if(INVALID_HANDLE_VALUE == hFind) return;while(TRUE){if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY){if(FindFileData.cFileName[0]!='.'){strcpy(szFile,lpPath);strcat(szFile,"");strcat(szFile,FindFileData.cFileName);find(szFile);}}else{cout << FindFileData.cFileName;}if(!FindNextFile(hFind,&FindFileData)) break;}FindClose(hFind);}2.利用CFileFind类较简洁的实现该功能void CModelDlg::FindBmpFile(CString strFoldername){CString m_cstrFileList="";CFileFind tempFind;BOOL bFound; //判断是否成功找到文件bFound=tempFind.FindFile(strFoldername + "\\*.*"); /修改" "内内容给限定查找文件类型CString strTmp; //如果找到的是文件夹存放文件夹路径while(bFound) //遍历所有文件{bFound=tempFind.FindNextFile(); //第一次执行FindNextFile 是选择到第一个文件,以后执行为选择//到下一个文件if(!tempFind.IsDots()) continue; //如果找到的是返回上层的目录则结束本次查找if(tempFind.IsDirectory()) //找到的是文件夹,则遍历该文件夹下的文件{strTmp="";strTmp=tempFind.GetFilePath();FindFile(strTmp);}else{strTmp=tempFind.GetFileName(); //保存文件名,包括后缀名// 在此处添加对找到文件的处理}}tempFind.Close(); return;}。

C#遍历文件夹

C#遍历文件夹
string[] filename=Directory.GetFiles(pathtext);
//初始化文件计数器
int a=0;
//初始化文件大小
long j=0;
//打开等待窗口
Sousuo ss=new Sousuo();
//得到符合条件的文件,某个时间段之前的文件
if(getFileTime>CreationTime)
{
//得到文件的大小
FileInfo f=new FileInfo(file);
long len=f.Length;
if(getFileTime>CreationTime)
{
//删除
File.Delete(file);
progressBar1.Step=10;
progressBar1.PerformStep();
}
}
MessageBox.Show("文件删除完毕!","系统提示");
}
}
else{
}
}
j=j+len;
a++;
}
}
//关闭窗口
ss.Close();
num.Text=a.ToString();//输出个数
i=a;
long x=j/1024/1024;
filelen.Text=x.ToString();//得到大小
{
//得到路径
string pathtext=filepath.Text.Trim();
//得到时间
string filetime=dateTimePicker1.Value.ToShortDateString();

VC++遍历INI文件

VC++遍历INI文件

char strBuffer[128]; //临时缓冲区,用于接收字符串
char strSection[128]; //用于接收节点名称 #34;.\\UnitInfo.INI"); //INI文件位于VC++工程的根目录
//获取第一个节点名
结合MSDN对这几个函数的介绍,很容易想到的是,使用GetPrivateProfileSectionNames函数获取节点名称,以此作为参数给GetPrivateProfileString函数,读取第一个关键字名称,接着再读取该关键字下的值。代码如下:
char strSection[128];
WritePrivateProfileString(strSection,strUnitID,NULL,strFileName);
细心的您可能会问,怎么可以将配置文件信息都删除了,如此一来,程序下一次运行岂不是读不到信息?别急,在我们读完所需要的所有配置信息后,我们必须重建该配置文件。如何重建?只需循环调用WritePrivateProfileString函数。代码如下:
DWORD nChar = GetPrivateProfileSectionNames(strSection,sizeof(strSection),strFileName);
for (int i = 0; i < g_UnitNumber; i++)
{
//保存探头标识
nChar = GetPrivateProfileString(strSection,NULL,"",strBuffer,sizeof(strBuffer),strFileName);
g_UnitID[i] = strBuffer;

C++遍历文件夹下所有文件的多种方法

C++遍历文件夹下所有文件的多种方法

C++遍历⽂件夹下所有⽂件的多种⽅法为数不多的好⽤的代码,遍历⽂件夹获取所有⼦⽂件名,"filespec"可⽤通配符“*?”。

注意如果⽤相对路径的话,获取所有⽂件名后应再调⽤SetInitDir将初始⽬录改为当前⽬录,否则中间⽣成的⽂件都会放在之前的“InitDir”内。

C/C++遍历⽂件夹感觉真是很不好⽤,建议还是使⽤C/C++做单任务处理,然后通过脚本语⾔实现遍历⽐较合理。

CBrowseDir.h#include <io.h>#include <stdlib.h>#include <direct.h>#include <iostream>#include <string>#include <vector>using namespace std;class CBrowseDir{protected://存放初始⽬录的绝对路径,以'\'结尾char m_szInitDir[_MAX_PATH];public://缺省构造器CBrowseDir();//设置初始⽬录为dir,如果返回false,表⽰⽬录不可⽤bool SetInitDir(const char *dir);//开始遍历初始⽬录及其⼦⽬录下由filespec指定类型的⽂件//filespec可以使⽤通配符 * ?,不能包含路径。

//如果返回false,表⽰遍历过程被⽤户中⽌bool BeginBrowse(const char *filespec);vector<string> BeginBrowseFilenames(const char *filespec);protected://遍历⽬录dir下由filespec指定的⽂件//对于⼦⽬录,采⽤迭代的⽅法//如果返回false,表⽰中⽌遍历⽂件bool BrowseDir(const char *dir,const char *filespec);vector<string> GetDirFilenames(const char *dir,const char *filespec);//函数BrowseDir每找到⼀个⽂件,就调⽤ProcessFile//并把⽂件名作为参数传递过去//如果返回false,表⽰中⽌遍历⽂件//⽤户可以覆写该函数,加⼊⾃⼰的处理代码virtual bool ProcessFile(const char *filename);//函数BrowseDir每进⼊⼀个⽬录,就调⽤ProcessDir//并把正在处理的⽬录名及上⼀级⽬录名作为参数传递过去//如果正在处理的是初始⽬录,则parentdir=NULL//⽤户可以覆写该函数,加⼊⾃⼰的处理代码//⽐如⽤户可以在这⾥统计⼦⽬录的个数virtual void ProcessDir(const char *currentdir,const char *parentdir);};CBrowseDir.cpp#include "CBrowseDir.h"CBrowseDir::CBrowseDir(){//⽤当前⽬录初始化m_szInitDirgetcwd(m_szInitDir,_MAX_PATH);//如果⽬录的最后⼀个字母不是'\',则在最后加上⼀个'\'int len=strlen(m_szInitDir);if (m_szInitDir[len-1] != '\\')strcat(m_szInitDir,"\\");}bool CBrowseDir::SetInitDir(const char *dir){return false;//判断⽬录是否存在if (_chdir(m_szInitDir) != 0)return false;//如果⽬录的最后⼀个字母不是'\',则在最后加上⼀个'\'int len=strlen(m_szInitDir);if (m_szInitDir[len-1] != '\\')strcat(m_szInitDir,"\\");return true;}vector<string> CBrowseDir::BeginBrowseFilenames(const char *filespec) {ProcessDir(m_szInitDir,NULL);return GetDirFilenames(m_szInitDir,filespec);}bool CBrowseDir::BeginBrowse(const char *filespec){ProcessDir(m_szInitDir,NULL);return BrowseDir(m_szInitDir,filespec);}bool CBrowseDir::BrowseDir(const char *dir,const char *filespec){_chdir(dir);//⾸先查找dir中符合要求的⽂件long hFile;_finddata_t fileinfo;if ((hFile=_findfirst(filespec,&fileinfo)) != -1){do{//检查是不是⽬录//如果不是,则进⾏处理if (!(fileinfo.attrib & _A_SUBDIR)){char filename[_MAX_PATH];strcpy(filename,dir);strcat(filename,);cout << filename << endl;if (!ProcessFile(filename))return false;}} while (_findnext(hFile,&fileinfo) == 0);_findclose(hFile);}//查找dir中的⼦⽬录//因为在处理dir中的⽂件时,派⽣类的ProcessFile有可能改变了//当前⽬录,因此还要重新设置当前⽬录为dir。

CC++遍历目录下的所有文件(Windows篇,超详细)

CC++遍历目录下的所有文件(Windows篇,超详细)

CC++遍历⽬录下的所有⽂件(Windows篇,超详细)注:1. 本⽂讨论的是怎么⽤Windows API遍历⽬录下的所有⽂件。

除Windows API,还有⼀种Windows/Linux通⽤的⽅式,使⽤<io.h>。

2. 本⽂部分翻译⾃MSDN,翻译可能不准确。

WIN32_FIND_DATA结构遍历⽬录下的⽂件需要⽤到WIN32_FIND_DATA结构。

实际上有两种结构:WIN32_FIND_DATAA和WIN32_FIND_DATAW。

A和W分别代表ASCII和宽字符(Unicode)。

定义UNICODE宏时,WIN32_FIND_DATA指WIN32_FIND_DATAW;否则指WIN32_FIND_DATAA。

下⾯是两个结构的定义(minwinbase.h,VS2015):typedef struct _WIN32_FIND_DATAA {DWORD dwFileAttributes;FILETIME ftCreationTime;FILETIME ftLastAccessTime;FILETIME ftLastWriteTime;DWORD nFileSizeHigh;DWORD nFileSizeLow;DWORD dwReserved0;DWORD dwReserved1;_Field_z_ CHAR cFileName[ MAX_PATH ];_Field_z_ CHAR cAlternateFileName[ 14 ];#ifdef _MACDWORD dwFileType;DWORD dwCreatorType;WORD wFinderFlags;#endif} WIN32_FIND_DATAA;typedef struct _WIN32_FIND_DATAW {DWORD dwFileAttributes;FILETIME ftCreationTime;FILETIME ftLastAccessTime;FILETIME ftLastWriteTime;DWORD nFileSizeHigh;DWORD nFileSizeLow;DWORD dwReserved0;DWORD dwReserved1;_Field_z_ WCHAR cFileName[ MAX_PATH ];_Field_z_ WCHAR cAlternateFileName[ 14 ];#ifdef _MACDWORD dwFileType;DWORD dwCreatorType;WORD wFinderFlags;#endif} WIN32_FIND_DATAW;关于_MAC宏的部分可以忽略,这是有历史原因的——曾今Microsoft是Mac的最⼤开发者,为了⽅便Windows上的应⽤移植到Mac上,就使⽤_MAC宏,如果是Mac操作系统_MAC就是有定义的。

VBA中文件夹遍历的实用技巧

VBA中文件夹遍历的实用技巧

VBA中文件夹遍历的实用技巧VBA(Visual Basic for Applications)是一种在Microsoft Office应用程序中嵌入的编程语言,可以用于自动化处理任务、创建宏以及增强应用程序的功能。

在许多情况下,我们需要操作大量的文件和文件夹,而文件夹遍历是一项十分常见且实用的任务。

本文将介绍一些在VBA中进行文件夹遍历的实用技巧,帮助您更高效地处理文件和文件夹。

1. 获取文件夹路径在开始文件夹遍历之前,首先需要获取要遍历的文件夹的路径。

可以使用VBA中的`Application.FileDialog(msoFileDialogFolderPicker)`方法来打开文件夹选择对话框,让用户选择要遍历的文件夹,并将所选文件夹的路径保存到一个变量中。

以下是一个示例代码:```vbaDim myFolder As StringWith Application.FileDialog(msoFileDialogFolderPicker).Title = "选择要遍历的文件夹"If .Show = -1 ThenmyFolder = .SelectedItems(1)End IfEnd With```在这个示例代码中,用户将会看到一个打开文件夹选择对话框,可以选择要遍历的文件夹。

如果用户选择了文件夹并点击了对话框的“确定”按钮,那么所选文件夹的路径将保存到`myFolder`变量中。

2. 遍历文件夹获取到要遍历的文件夹路径后,就可以开始实际的文件夹遍历了。

可以使用VBA中的`FileSystemObject`对象来处理文件和文件夹。

以下是一个示例代码,展示了如何遍历文件夹并输出其中的文件名:```vbaSub TraverseFolder(ByVal folderPath As String)Dim fso As ObjectDim folder As ObjectDim file As ObjectSet fso = CreateObject("Scripting.FileSystemObject")Set folder = fso.GetFolder(folderPath)For Each file In folder.FilesDebug.Print ' 在此处添加你想要做的操作,比如复制、移动、重命名文件等等Next fileFor Each folder In folder.SubfoldersTraverseFolder folder.Path' 在此处添加你想要做的操作,比如创建子文件夹、获取文件夹大小等等Next folderSet fso = NothingSet folder = NothingSet file = NothingEnd Sub```在这个示例代码中,通过调用`TraverseFolder`子过程并传入文件夹路径,可以遍历文件夹及其子文件夹中的所有文件。

VC判断文件或文件夹是否存在

VC判断文件或文件夹是否存在

如果想要进一步了解 FindFirstFile 函数和 WIN32_FIND_DATA 结构体的用法,请参考参考 文献【1】。 如果要进一步了解 GetFileAttributes 函数的用法,请参考参考文献【2】
参考文献: 【1】VC 遍历文件夹 /blog/static/237051108201472845652309/ 【2】获取和设置文件或文件夹属性
一 PathFileExists 判断文件或文件夹是否存在
BOOL PathFileExists(LPCTSTR lpszPath ); 功能:判断文件或文件夹是否存在。 参数:
LPCTSTR lpszPath 文件或文件夹的路径。如果是文件名必须带后缀。 返回值: 存在返回 TRUE,不存在返回 FALSE。 说明:
在,反之存在。
/******************************************
函 数 名: CheckFilePathExist
参 数:
LPCSTR pPath
文件或文件夹路径
返 回 值:
true 存在 false 不存在
功 能: 检查文件或文件夹是否存在
******************************************/
bool CheckFilePathExist(LPCSTR pPath)
{
WIN32_FIND_DATA pathData;
HANDLE
pathHandle;
string
sTemp=pPath;
if ('\\'==sTemp[sTemp.length()-1]){
//去掉文件夹最后的’\’
sTemp=sTemp.substr(0,sTemp.length()-1);

vc文件夹遍历完整程序

vc文件夹遍历完整程序

//// Class: CFileDialogST//// Compiler: V isual C++// Tested on: Visual C++ 6.0// Visual C++ 7.0//// Version: See GetVersionC() or GetVersionI()//// Created: 23/June/2001// Updated: 07/November/2002//// Author: Davide Calabro' davide_calabro@//// Disclaimer// ----------// THIS SOFTWARE AND THE ACCOMPANYING FILES ARE DISTRIBUTED "AS IS" AND WITHOUT // ANY WARRANTIES WHETHER EXPRESSED OR IMPLIED. NO REPONSIBILITIES FOR POSSIBLE // DAMAGES OR EVEN FUNCTIONALITY CAN BE TAKEN. THE USER MUST ASSUME THE ENTIRE // RISK OF USING THIS SOFTWARE.//// Terms of use// ------------// THIS SOFTWARE IS FREE FOR PERSONAL USE OR FREEWARE APPLICATIONS.// IF YOU USE THIS SOFTWARE IN COMMERCIAL OR SHAREWARE APPLICATIONS YOU// ARE GENTLY ASKED TO DONATE 5$ (FIVE U.S. DOLLARS) TO THE AUTHOR://// Davide Calabro'// P.O. Box 65// 21019 Somma Lombardo (VA)// Italy//#ifndef _FILEDIALOGST_H_#define _FILEDIALOGST_H_#include <Shlobj.h>#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000// Uncomment following line if you are using this class outside the DLL#define _FILEDIALOGST_NODLL_#ifndef _FILEDIALOGST_NODLL_#ifndef _CMLHTDLL_NOLIB_#ifdef _DEBUG#ifdef _UNICODE#pragma comment(lib, "CmlHTud.lib")#else#pragma comment(lib, "CmlHTd.lib")#endif#else#ifdef _UNICODE#pragma comment(lib, "CmlHTu.lib")#else#pragma comment(lib, "CmlHT.lib")#endif#endif#endif#ifdef _CMLHTDLL_BUILDDLL_#define FILEDIALOGST_EXPORT __declspec(dllexport)#else#define FILEDIALOGST_EXPORT __declspec(dllimport)#endif#else#define FILEDIALOGST_EXPORT#endifclass FILEDIALOGST_EXPORT CFileDialogST{public:CFileDialogST(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL);CFileDialogST();virtual ~CFileDialogST();virtual int DoModal();CString GetPathName() const;CString GetFileName() const;CString GetFileTitle() const;CString GetFileExt() const;CString GetFileDir() const;CString GetFileDrive() const;POSITION GetStartPosition() const;CString GetNextPathName(POSITION& pos) const;BOOL GetReadOnlyPref() const;int SelectFolder(LPCTSTR lpszTitle = NULL, LPCTSTR lpszStartPath = NULL, UINT ulFlags = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS, CWnd* pParentWnd = NULL);CString GetSelectedFolder() const;static short GetVersionI() {return 13;}static LPCTSTR GetVersionC() {return (LPCTSTR)_T("1.3");}private:#if (_WIN32_WINNT < 0x0500)struct OPENFILENAMEEX : public OPENFILENAME{void* pvReserved;DWORD dwReserved;DWORD FlagsEx;};#endifpublic:#if (_WIN32_WINNT >= 0x0500)OPENFILENAME m_ofn;#elseOPENFILENAMEEX m_ofn;#endifBOOL m_bOpenFileDialog;private:static int __stdcall BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData);TCHAR m_szFile[MAX_PATH];TCHAR m_szFileTitle[MAX_PATH];TCHAR m_szSelectedFolder[MAX_PATH];};#endif#include "stdafx.h"#include "FileDialogST.h"#ifdef _DEBUG#undef THIS_FILEstatic char THIS_FILE[]=__FILE__;#define new DEBUG_NEW#endif// Constructs a CFileDialogST object.// Most frequently used parameters can be passed on the argument list.//// Parameters:// [IN] bOpenFileDialog// Set to TRUE to construct a File Open dialog box or// FALSE to construct a File Save As dialog box.// [IN] lpszDefExt// The default filename extension.// If the user does not include an extension in the Filename edit box,// the extension specified by lpszDefExt is automatically appended// to the filename.// If this parameter is NULL, no file extension is appended.// [IN] lpszFileName// The initial filename that appears in the filename edit box.// If NULL, no filename initially appears// [IN] dwFlags// A combination of one or more flags that allow you to customize the dialog box.// [IN] lpszFilter// A series of string pairs that specify filters you can apply to the file.// If you specify file filters, only selected files will appear in the// Files list box.// [IN] pParentWnd// Pointer to the owner window for the dialog box. Can be NULL.//CFileDialogST::CFileDialogST(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd){::ZeroMemory(&m_ofn, sizeof(m_ofn));::ZeroMemory(&m_szFile, sizeof(m_szFile));::ZeroMemory(&m_szFileTitle, sizeof(m_szFileTitle));::ZeroMemory(&m_szSelectedFolder, sizeof(m_szSelectedFolder));// Store parametersm_bOpenFileDialog = bOpenFileDialog;m_ofn.lpstrDefExt = lpszDefExt;/* Old code from version 1.0if (lpszFileName != NULL)m_ofn.lpstrFile = (LPTSTR)lpszFileName;else{m_ofn.lpstrFile = m_szFile;m_ofn.nMaxFile = MAX_PATH;} // else*/if (lpszFileName != NULL)_tcsncpy(m_szFile, lpszFileName, MAX_PATH);m_ofn.lpstrFile = m_szFile;m_ofn.nMaxFile = MAX_PATH;m_ofn.lpstrFileTitle = m_szFileTitle;m_ofn.nMaxFileTitle = MAX_PATH;m_ofn.Flags = dwFlags | OFN_EXPLORER;m_ofn.lpstrFilter = lpszFilter;if (pParentWnd != NULL)m_ofn.hwndOwner = pParentWnd->m_hWnd;}// Constructs a CFileDialogST object.// All required parameters must be initialized by hand accessing// the m_ofn and m_bOpenFileDialog public members.CFileDialogST::CFileDialogST(){::ZeroMemory(&m_ofn, sizeof(m_ofn));::ZeroMemory(&m_szFile, sizeof(m_szFile));::ZeroMemory(&m_szFileTitle, sizeof(m_szFileTitle));::ZeroMemory(&m_szSelectedFolder, sizeof(m_szSelectedFolder));m_bOpenFileDialog = TRUE;}CFileDialogST::~CFileDialogST(){}// This function displays the file selection dialog box and allows the user to make a selection.// All required fields of the m_ofn public structure must be filled. This can be done// using the class constructor or accessing directly the structure. Also the public// variable m_bOpenFileDialog must be set to TRUE to get an open dialog box or to FALSE to // get a save dialog box.//// Return value:// IDOK// The user has selected a filename.// IDCANCEL// The user has closed the dialog without selecting any filename.//int CFileDialogST::DoModal(){BOOL bRetValue = FALSE;m_ofn.lStructSize = sizeof(m_ofn);// Execute dialogif (m_bOpenFileDialog)bRetValue = ::GetOpenFileName(&m_ofn);elsebRetValue = ::GetSaveFileName(&m_ofn);return (bRetValue ? IDOK : IDCANCEL);} // End of DoModal// This function returns the full path of the selected file.//// Return value:// A CString object containing the full path of the file.//CString CFileDialogST::GetPathName() const{return m_ofn.lpstrFile;} // End of GetPathName// This function returns the filename of the selected file.//// Return value:// A CString object containing the name of the file.//CString CFileDialogST::GetFileName() const{return m_ofn.lpstrFileTitle;} // End of GetFileName// This function returns the title of the selected file.//// Return value:// A CString object containing the title of the file.//CString CFileDialogST::GetFileTitle() const{TCHAR szTitle[MAX_PATH];// Split path into components_tsplitpath(m_ofn.lpstrFile, NULL, NULL, szTitle, NULL);return szTitle;} // End of GeFileTitle// This function returns the extension of the selected file.//// Return value:// A CString object containing the extension of the file.//CString CFileDialogST::GetFileExt() const{TCHAR szExt[MAX_PATH];// Split path into components_tsplitpath(m_ofn.lpstrFile, NULL, NULL, NULL, szExt);return szExt;} // End of GeFileExt// This function returns the directory (without drive) of the selected file.//// Return value:// A CString object containing the directory (without drive) of the file. //CString CFileDialogST::GetFileDir() const{TCHAR szDrive[MAX_PATH];TCHAR szDir[MAX_PATH];// Split path into components_tsplitpath(m_ofn.lpstrFile, szDrive, szDir, NULL, NULL);::lstrcat(szDrive, szDir);return szDrive;} // End of GeFileDir// This function returns the drive of the selected file.//// Return value:// A CString object containing the drive of the file.//CString CFileDialogST::GetFileDrive() const{TCHAR szDrive[MAX_PATH];// Split path into components_tsplitpath(m_ofn.lpstrFile, szDrive, NULL, NULL, NULL);return szDrive;} // End of GeFileDrive// This function returns the position of the first element of the filename list.//// Return value:// A POSITION value that can be used for iteration.// NULL if the list is empty.//POSITION CFileDialogST::GetStartPosition() const{return (POSITION)m_ofn.lpstrFile;} // End of GetStartPosition// This function returns the full path of the next selected file.//// Parameters:// [IN] pos// A reference to a POSITION value returned by a previous GetNextPathName // or GetStartPosition function call.// NULL if the end of the list has been reached.//// Return value:// A CString object containing the full path of the file.//// Note: this function has been copied exactly from the MFC// implementation of the CFileDialog class.//CString CFileDialogST::GetNextPathName(POSITION& pos) const {BOOL bExplorer = m_ofn.Flags & OFN_EXPLORER;TCHAR chDelimiter;if (bExplorer)chDelimiter = '\0';elsechDelimiter = ' ';LPTSTR lpsz = (LPTSTR)pos;if (lpsz == m_ofn.lpstrFile) // first time{if ((m_ofn.Flags & OFN_ALLOWMULTISELECT) == 0){pos = NULL;return m_ofn.lpstrFile;}// find char pos after first Delimiterwhile(*lpsz != chDelimiter && *lpsz != '\0')lpsz = _tcsinc(lpsz);lpsz = _tcsinc(lpsz);// if single selection then return only selectionif (*lpsz == 0){pos = NULL;return m_ofn.lpstrFile;}}CString strPath = m_ofn.lpstrFile;if (!bExplorer){LPTSTR lpszPath = m_ofn.lpstrFile;while(*lpszPath != chDelimiter)lpszPath = _tcsinc(lpszPath);strPath = strPath.Left(lpszPath - m_ofn.lpstrFile);}LPTSTR lpszFileName = lpsz;CString strFileName = lpsz;// find char pos at next Delimiterwhile(*lpsz != chDelimiter && *lpsz != '\0')lpsz = _tcsinc(lpsz);if (!bExplorer && *lpsz == '\0')pos = NULL;else{if (!bExplorer)strFileName = strFileName.Left(lpsz - lpszFileName);lpsz = _tcsinc(lpsz);if (*lpsz == '\0') // if double terminated then donepos = NULL;elsepos = (POSITION)lpsz;}// only add '\\' if it is neededif (!strPath.IsEmpty()){// check for last back-slash or forward slash (handles DBCS)LPCTSTR lpsz = _tcsrchr(strPath, '\\');if (lpsz == NULL)lpsz = _tcsrchr(strPath, '/');// if it is also the last character, then we don't need an extraif (lpsz != NULL &&(lpsz - (LPCTSTR)strPath) == strPath.GetLength()-1){ASSERT(*lpsz == '\\' || *lpsz == '/');return strPath + strFileName;}}return strPath + '\\' + strFileName;} // End of GetNextPathName// This function returns if the Read Only check box in the dialog box is selected.//// Return value:// Non-zero if the Read Only check box in the dialog box is selected; otherwise 0. //BOOL CFileDialogST::GetReadOnlyPref() const{return ((m_ofn.Flags & OFN_READONLY) == OFN_READONLY);} // End of GetReadyOnlyPrefint __stdcall CFileDialogST::BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData){if (uMsg == BFFM_INITIALIZED && lpData != NULL){::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);}else // uMsg == BFFM_SELCHANGED{}return 0;} // End of BrowseCtrlCallback// This function lets the user to selec a folder.//// Parameters:// [IN] lpszTitle// Address of a null-terminated string that is displayed above the// tree view control in the dialog box. This string can be used to// specify instructions to the user. Can be NULL.// [IN] lpszStartPath// Address of a null-terminated string containing the initial folder// to open. Can be NULL.// [IN] ulFlags// Flags specifying the options for the dialog box.// [IN] pParentWnd// Pointer to the owner window for the dialog box. Can be NULL.//// Return value:// IDOK// The user has selected a folder and pressed OK. A call// to GetSelectedFolder() will return the selected folder.// IDCANCEL// The user has closed the dialog without selecting any folder.//int CFileDialogST::SelectFolder(LPCTSTR lpszTitle, LPCTSTR lpszStartPath, UINT ulFlags, CWnd* pParentWnd){LPMALLOC pMalloc;BROWSEINFO bi;LPITEMIDLIST pidl;int nRetValue = IDCANCEL;::ZeroMemory(&bi, sizeof(bi));// Gets the Shell's default allocatorif (::SHGetMalloc(&pMalloc) == NOERROR){// Get help on BROWSEINFO struct - it's got all the bit settings.if (pParentWnd != NULL)bi.hwndOwner = pParentWnd->m_hWnd;bi.pidlRoot = NULL;bi.pszDisplayName = m_szSelectedFolder;bi.lpszTitle = lpszTitle;bi.ulFlags = ulFlags;bi.lpfn = BrowseCtrlCallback;bi.lParam = (LPARAM)lpszStartPath;// This next call issues the dialog box.if ((pidl = ::SHBrowseForFolder(&bi)) != NULL){if (::SHGetPathFromIDList(pidl, m_szSelectedFolder)){// At this point pszBuffer contains the selected pathnRetValue = IDOK;} // if// Free the PIDL allocated by SHBrowseForFolder.pMalloc->Free(pidl);} // if// Release the shell's allocator.pMalloc->Release();} // ifreturn nRetValue;} // End of SelectFolder// This function returns the folder selected by the user with a call to SelectFolder. //// Return value:// A CString object containing the selected folder.// Without a previous call to SelectFolder this string can be empty or // reflect the last selected folder.//CString CFileDialogST::GetSelectedFolder() const{return m_szSelectedFolder;} // End of GetSelectedFolder。

VC++中如何遍历整个目录树查找文件

VC++中如何遍历整个目录树查找文件

VC++中如何遍历整个目录树查找文件在应用程序的开发过程中,经常会遇到如何查找某一文件以确定此文件路径的问题。

利用CFileFind类可以比较方便地在当前目录下进行文件查找,但却不能对其子目录中的文件进行搜寻。

而实际应用中往往需要对某一整个目录树,甚至是整个C盘或D盘驱动器进行文件搜寻。

通过实践,我们在Visual C++ 6.0 中编程实现了如何遍历任意目录树,以查找某一特定的文件。

在下面的具体陈述中可以看到,在确定要查找的文件名和要进行搜索的目录的名称后,将调用函数Search_Directory进行文件的查找。

首先依次查找当前目录下的每一个实体(文件或是子目录),如果是某一子目录,则进入该子目录并递归调用函数Search_Dirctory进行查找,查找完毕之后, 再返回上一级目录;如果不是子目录而是某一文件,则判断其是否就是我们要查找的文件,如果是则输出其完整的文件路径。

这样,通过Search_Directory函数的反复递归调用,就可以实现对整个目录,包括子目录的遍历搜索。

下面将举例详细讲述如何在VC++中编程实现在整个目录树中的文件查找。

1.在Visual C++ 6.0(VC++ 5.0与之类似)中用默认方式创建了一基于对话框的应用程序Search。

在主窗口对话框上放置一命令按钮,其Caption 为“Search File”,ID为ID—BUTTON—SEARCH。

单击此按钮将完成文件的查找工作。

2.利用ClassWizard为“Search File”按钮的BN_CLICKED 事件添加处理函数OnButtonSearch,代码如下:#include 〈direct.h〉#include 〈io.h〉......void CSearchDlg::OnButtonSearch(){// TODO: Add your control notification handler code herechar szFilename[80];// 字符串 szFilename 表示要查找的文件名strcpy(szFilename,″Mytext.txt″);_chdir(″d:\\″); // 进入要查找的路径(也可为某一具体的目录)// 查找文件, 如果查到则显示文件的路径全名Search_Directory(szFilename);// 为CSearchDlg类的一成员函数MessageBox(″查找文件完毕!″);// 显示查找完毕的信息}3.在CSearchDlg类中增加成员函数Search_Directory,它将完成具体的文件查找工作,代码如下:void CSearchDlg::Search_Directory(char* szFilename){long handle;struct _finddata_t filestruct;//表示文件(或目录)的信息char path_search[_MAX_PATH];//表示查找到的路径结果// 开始查找工作, 找到当前目录下的第一个实体(文件或子目录),// ″*″表示查找任何的文件或子目录, filestruct为查找结果handle = _findfirst(″*″, &filestruct);// 如果handle为-1, 表示当前目录为空, 则结束查找而返回if((handle == -1)) return;// 检查找到的第一个实体是否是一个目录(为其名称)if( ::GetFileAttributes() &FILE—ATTRIBUTE—DIRECTORY ){// 如果是目录, 则进入该目录并递归调用函数Search_Dirctory进行查找,// 注意: 如果目录名的首字符为′.′(即为″.″或″..″), 则不用进行查找if( [0] != ′.′ ){—chdir();Search_Directory(szFilename);// 查找完毕之后, 返回上一级目录—chdir(″..″);}}else // 如果第一个实体不是目录, 则检查是否是要查找的文件{// stricmp对两字符串进行小写形式的对比, 返回为0表示完全一致if( !stricmp(, szFilename) ){// 先获得当前工作目录的全路径—getcwd(path_search,—MAX—PATH);// 再获得文件的完整的路径名(包含文件的名称)strcat(path_search,″\\″);strcat(path—search,);MessageBox(path_search); //输出显示}}// 继续对当前目录中的下一个子目录或文件进行与上面同样的查找while(!(—findnext(handle,&filestruct))){if( ::GetFileAttributes() &FILE—ATTRIBUTE—DIRECTORY ){if(* != ′.′){—chdir();Search_Directory(szFilename);—chdir(″..″);}}else{if(!stricmp(,szFilename)){—getcwd(path—search,—MAX—PATH);strcat(path_search,″\\″);strcat(path_search,);MessageBox(path_search);}}}—findclose(handle);// 最后结束整个查找工作}这样我们就可以对整个目录进行遍历搜索,查找某一特定的文件,并输出显示其完整的文件路径。

C语言文件遍历及读写

C语言文件遍历及读写

C语⾔⽂件遍历及读写c语⾔中遍历⽂件或者⽂件夹,系统提供的dirent和DIR结构体中包含了⽂件的很多信息struct dirent 结构struct dirent{long d_ino; /* inode number 索引节点号 */off_t d_off; /* offset to this dirent 在⽬录⽂件中的偏移 */unsigned short d_reclen; /* length of this d_name ⽂件名长 */unsigned char d_type; /* the type of d_name ⽂件类型 */char d_name [NAME_MAX+1]; /* file name (null-terminated) ⽂件名,最长255字符 */}DIR 结构struct __dirstream{void *__fd; /* `struct hurd_fd' pointer for descriptor. */char *__data; /* Directory block. */int __entry_data; /* Entry number `__data' corresponds to. */char *__ptr; /* Current pointer into the block. */int __entry_ptr; /* Entry number `__ptr' corresponds to. */size_t __allocation; /* Space allocated for the block. */size_t __size; /* Total valid data in the block. */__libc_lock_define (, __lock) /* Mutex lock for this structure. */};typedef struct __dirstream DIR;struct dirent中的⼏个成员:d_type:4表⽰为⽬录,8表⽰为⽂件d_reclen:16表⽰⼦⽬录或⽂件,24表⽰⾮⼦⽬录经过本⼈亲⾃试验发现:d_reclen:16表⽰⼦⽬录或以.开头的隐藏⽂件,24表⽰普通⽂本⽂件,28为⼆进制⽂件,等等d_name:⽬录或⽂件的名称具体代码如下,仅供参考:#include <stdio.h>#include <dirent.h>#include <sys/stat.h>void List(char *path){struct dirent* ent = NULL;DIR *pDir;pDir=opendir(path);while (NULL != (ent=readdir(pDir))){if (ent->d_reclen==24){if (ent->d_type==8){printf("普通⽂件:%s\n", ent->d_name);}else{printf("⼦⽬录:%s\n",ent->d_name);List(ent->d_name);printf("返回%s\n",ent->d_name);}}}}int main(int argc, char *argv[]){List(argv[1]);return0;}上⾯函数修改后:void List(char *path){printf("路径为[%s]\n", path);struct dirent* ent = NULL;DIR *pDir;pDir=opendir(path);//d_reclen:16表⽰⼦⽬录或以.开头的隐藏⽂件,24表⽰普通⽂本⽂件,28为⼆进制⽂件,还有其他……while (NULL != (ent=readdir(pDir))){printf("reclen=%d type=%d\t", ent->d_reclen, ent->d_type);if (ent->d_reclen==24){//d_type:4表⽰为⽬录,8表⽰为⽂件if (ent->d_type==8){printf("普通⽂件[%s]\n", ent->d_name);}}else if(ent->d_reclen==16){printf("[.]开头的⼦⽬录或隐藏⽂件[%s]\n",ent->d_name);}else{printf("其他⽂件[%s]\n", ent->d_name);}}}下⾯是⽹上找来的⼏个⼩例⼦:#include <stdio.h>#include <dirent.h>#include <sys/types.h>#include <sys/stat.h>void dir_scan(char *path, char *file);int count = 0;int main(int argc, char *argv[]){struct stat s;if(argc != 2){printf("one direction requried\n");exit(1);}if(lstat(argv[1], &s) < 0){printf("lstat error\n");exit(2);}//判断⼀个路径是否是⽬录if(!S_ISDIR(s.st_mode)){printf("%s is not a direction name\n", argv[1]); exit(3);}dir_scan("", argv[1]);printf("total: %d files\n", count);exit(0);}void dir_scan(char *path, char *file){struct stat s;DIR *dir;struct dirent *dt;char dirname[50];memset(dirname, 0, 50*sizeof(char));strcpy(dirname, path);if(lstat(file, &s) < 0){printf("lstat error\n");}if(S_ISDIR(s.st_mode)){strcpy(dirname+strlen(dirname), file);strcpy(dirname+strlen(dirname), "/");if((dir = opendir(file)) == NULL){printf("opendir %s/%s error\n");exit(4);}if(chdir(file) < 0) {printf("chdir error\n");exit(5);}while((dt = readdir(dir)) != NULL){if(dt->d_name[0] == '.'){continue;}dir_scan(dirname, dt->d_name);}if(chdir("..") < 0){printf("chdir error\n");exit(6);}}else{printf("%s%s\n", dirname, file);count++;}}linux c 下如何获得⽬录下的⽂件数⽬。

遍历文件夹并建成目录树-VC知识库文章

遍历文件夹并建成目录树-VC知识库文章

遍历文件夹并建成目录树-VC知识库文章下载本文示例工程前些日子,我在做程序中遇到这样一个问题,要用树型控件快速浏览指定文件夹中的文件,经过一番周折,终于做出来了,想到有些仁兄可能遇到和我相同的困难,所以将我的做法写出来,希望对大家有些帮助!(本文程序运行效果图)基本原理是用了函数的递归调用,再加入参数跟踪。

我在调试程序的时候,跟踪发现:程序只有在遍历完一个目录下所有子目录后,才返回同级的目录。

这样便可以用参数的值来决定目录的层次。

(1)在对话框上添加树型控件,选择Style中Has Buttons、Has Lines、Lines At Root。

(2)定义变量:HTREEITEM strRoot; //根目录 HTREEITEM strHTFir;//第一层 HTREEITEM strHTSec;//第二层HTREEITEM strHtThi;//第三层 HTREEITEM strHtFor;//第四层 HTREEITEM strHtFif;//第五层 // 没有找到更好的方法,所以只能这样来显示,估计一下大约能用到几层,如果找到好方法,请告诉我,非常感谢!HTREEITEM strHtEnd;//文件目录(3)添加遍历文件夹的函数BrowseFile(int CallNum, CString strFile)//CalNum-用来记录第几层目录,strFile-路径并添加以下内容:void CFileTreeDlg::BrowseFile(int CallNum, CString strFile) { CallNum++; CFileFind ff; CString szDir = strFile; if(szDir.Right(1) != "\\\\") szDir += "\\\\"; szDir += "*.*"; BOOLres = ff.FindFile(szDir); while(res) { res = ff.FindNextFile(); if(ff.IsDirectory()&& !ff.IsDots())//目录是文件夹 { //如果是一个子目录,用递归继续往深一层找 CStringstrPath = ff.GetFilePath(); //得到路径,做为递归调用的开始CString strTitle = ff.GetFileTitle();//得到目录名,做为树控的结点int i =0; switch(CallNum) { case1: strHTFir = m_FileTree.InsertItem(strTitle,0,0,NULL); break; case 2: strHTSec =m_FileTree.InsertItem(strTitle,0,0,strHTFir); break; case 3: strHtThi =m_FileTree.InsertItem(strTitle,0,0,strHTSec); break; case 4: strHtFor =m_FileTree.InsertItem(strTitle,0,0,strHtThi); break; default: strHtFif =m_FileTree.InsertItem(strTitle,0,0,strHtFor);break; } BrowseFile(CallNum,strPath);//递归调用 } else if(!ff.IsDirectory()&& !ff.IsDots())//到达最低层的文件 { //显示当前访问的文件 CString strPath; CStringstrTitle; strPath = ff.GetFilePath(); strTitle= ff.GetFileTitle(); switch(CallNum) { case 1: strRoot =m_FileTree.InsertItem(strTitle,0,0,NULL); break;case 2: strHtEnd =m_FileTree.InsertItem(strTitle,0,0,strHTFir); break; case 3: strHtEnd =m_FileTree.InsertItem(strTitle,0,0,strHTSec); break; case 4: strHtEnd =m_FileTree.InsertItem(strTitle,0,0,strHtThi); break; case 5: strHtEnd =m_FileTree.InsertItem(strTitle,0,0,strHtFor); break; default: strHtEnd =m_FileTree.InsertItem(strTitle,0,0,strHtFif);break; } } } ff.Close();//关闭 }(4)在OnInitDialog()函数中设置树控件的图标并调用自定义函数BrowseFile()BOOL CFileTreeDlg::OnInitDialog() { m_iImageList.Create(24, 24, TRUE,1, 0);//创建图标链 HICON hIcon = NULL; hIcon = (HICON)::LoadImage(::AfxGetInstanceHandle(), MAKEINTRESOURCE(IDI_KEBIAO), IMAGE_ICON, 24, 24, 0); m_iImageList.Add(hIcon); m_FileTree.SetImageList( &m_iImageList,TVSIL_NORMAL ); BrowseFile(0,"课程表");//遍历"课程表"文件夹内的所有目录 } (全文完)thank you very much~~~~~~~~ ( benny_pan1980 发表于2005-5-22 11:32:00)居然不用shell? ( VC70新手发表于 2004-1-11 4:11:00)BrowseFile(HTREEITEM hItem, CString strFile){HTREEITEM hT empItem;....//文件夹hTempItem=m_FileTree.InsertItem(strTitle,0,0,hItem);BrowseFile(hT empItem,strPath);//文件m_FileTree.InserItem(strTitle,0,0,hItem);....} ( zhonghaishan 发表于 2003-7-21 17:42:00)谢谢楼上各位的帮忙!大二了,我们学校要考四级了,鄙人最近不得不忍痛割爱,去忙于准备四级,谢谢大家给我的补充( lsjpyx 发表于 2003-4-9 12:51:00)HTREEITEM suu[10];if(CallNum==1)suu[CallNum] = m_FileTree.InsertItem(strTitle,0,0,NULL);else{suu[CallNum] = m_FileTree.InsertItem(strTitle,0,0,suu[CallNu m-1]);}BrowseFile(CallNum,strPath);}else if(!ff.IsDirectory() && !ff.IsDots()){//显示当前访问的文件CString strPath;CString strTitle;strPath = ff.GetFilePath();strTitle = ff.GetFileTitle();if(CallNum==1)suu[CallNum] = m_FileTree.InsertItem(strTitle,0,0,NULL);else{suu[CallNum] = m_FileTree.InsertItem(strTitle,0,0,suu[CallNu m-1]);}}不知道这样改一下是不是能提高效率 ( byb 发表于 2003-4-8 17:20:00)maybe use HTREEITEM as the parameter in BrowseFilefunction.good luck! ( proceedings 发表于 2003-4-2 20:35:00).......................................................More...。

c语言遍历指定文件夹,c遍历一个文件夹下及所有文件包括子文件夹.doc

c语言遍历指定文件夹,c遍历一个文件夹下及所有文件包括子文件夹.doc

c语⾔遍历指定⽂件夹,c遍历⼀个⽂件夹下及所有⽂件包括⼦⽂件夹.docc遍历⼀个⽂件夹下及所有⽂件包括⼦⽂件夹c#遍历⼀个⽂件夹下的所有⽂件包括⼦⽂件夹using System; using System.IO;class ListAllFilesDemo { public static void Main() { Console.Write( "请输⼊要查询的⽬录: "); string dir = Console.ReadLine(); try { ListFiles(new DirectoryInfo(dir)); } catch(IOException e) { Console.WriteLine(e.Message); } }public static void ListFiles(FileSystemInfo info) { if (!info.Exists)return;else{DirectoryInfo dirInfo = info as DirectoryInfo;if (dirInfo != null){foreach (var file in dirInfo.GetFileSystemInfos()){FileInfo fileInfo = file as FileInfo;if (fileInfo != null)Console.WriteLine(fileInfo.FullName);else{listFiles(file as DirectoryInfo);}}}}} }C#中遍历⽬录下的⽬录的⽂件(⼆)1、遍历⼀个⽬录下的全部⽬录,要⽤到System.IO.DirectoryInfo 类的GetDirectories⽅法:DirectoryInfo dir = new DirectoryInfo(@"c:\"); foreach(DirectoryInfo dChild in dir.GetDirectories("*")) {//如果⽤GetDirectories("ab*"),那么全部以ab开头的⽬录会被显⽰ Response.Write( + "");//打印⽬录名 Response.Write(dChild.FullName + "");//打印路径和⽬录名 }2、遍历⼀个⽬录下的全部⽂件,要⽤到System.IO.DirectoryInfo 类的GetFiles⽅法: DirectoryInfo dir = newDirectoryInfo(@"c:\"); foreach(DirectoryInfo dChild in dir.GetFiles("*")) {//如果⽤GetFiles("*.txt"),那么全部txt⽂件会被显⽰ Response.Write( + "");//打印⽂件名 Response.Write(dChild.FullName + "");//打印路径和⽂件名 }如何获取指定⽬录包含的⽂件和⼦⽬录1. DirectoryInfo.GetFiles():获取⽬录中(不包含⼦⽬录)的⽂件,返回类型为FileInfo[],⽀持通配符查找;2.DirectoryInfo.GetDirectories():获取⽬录(不包含⼦⽬录)的⼦⽬录,返回类型为DirectoryInfo[],⽀持通配符查找; 3. DirectoryInfo. GetFileSystemInfos():获取指定⽬录下(不包含⼦⽬录)。

C#遍历文件夹筛选目标文件

C#遍历文件夹筛选目标文件

C#遍历⽂件夹筛选⽬标⽂件有近400G的数据,⾸先需要写程序把⽬标⽂件标准化名称(相当耗时,各种情形,间接说明在数据采集过程中标准化操作的重要性,这样会给后续处理带来很多不必要的⿇烦和消耗)⽹上找了个⽅法还不错,还有⼀种递归的写法。

⽬前不再追求什么事⽆巨细,凡是能快速实现即可。

正所谓好钢⽤在⼑刃上。

⽅法⼀:public List<string> FindFile2(string sSourcePath){List<String> list = new List<string>();//遍历⽂件夹DirectoryInfo theFolder = new DirectoryInfo(sSourcePath);FileInfo[] thefileInfo = theFolder.GetFiles("*.BMP", SearchOption.TopDirectoryOnly);foreach (FileInfo NextFile in thefileInfo) //遍历⽂件list.Add(NextFile.FullName);//遍历⼦⽂件夹DirectoryInfo[] dirInfo = theFolder.GetDirectories();foreach (DirectoryInfo NextFolder in dirInfo){//list.Add(NextFolder.ToString());FileInfo[] fileInfo = NextFolder.GetFiles("*.BMP", SearchOption.AllDirectories);foreach (FileInfo NextFile in fileInfo) //遍历⽂件list.Add(NextFile.FullName);}return list;}⽅法⼆:利⽤递归⽅法List<String> list = new List<string>();public List<string> FindFile(string sSourcePath ){//在指定⽬录及⼦⽬录下查找⽂件,在list中列出⼦⽬录及⽂件DirectoryInfo Dir = new DirectoryInfo(sSourcePath);DirectoryInfo[] DirSub = Dir.GetDirectories();if (DirSub.Length <= 0){foreach (FileInfo f in Dir.GetFiles("*.*", SearchOption.TopDirectoryOnly)) //查找⽂件{list.Add(Dir + @"\" + f.ToString());}}int t = 1;foreach (DirectoryInfo d in DirSub)//查找⼦⽬录{FindFile(Dir + @"\" + d.ToString());list.Add(Dir + @"\" + d.ToString());if (t == 1){foreach (FileInfo f in Dir.GetFiles("*.*", SearchOption.TopDirectoryOnly)) //查找⽂件{list.Add(Dir + @"\" + f.ToString());}t = t + 1; }}return list; }。

C#遍历文件夹获取指定后缀名文件

C#遍历文件夹获取指定后缀名文件

C#遍历⽂件夹获取指定后缀名⽂件本⽂实例为⼤家分享了C#遍历⽂件夹获取指定后缀名⽂件的具体代码,供⼤家参考,具体内容如下问题描述:项⽬需要,要进⾏某⽂件夹下所有shp数据的读取解决⽅法:using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;namespace learnGDAL{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button3_Click(object sender, EventArgs e){List<FileInfo> lst = new List<FileInfo>();string strPath = @"E:\WORK\g1\北京市\北京市";List<FileInfo> lstFiles = getFile(strPath, ".shp",lst);foreach(FileInfo shpFile in lstFiles){label3.Text += shpFile.FullName+"\n";}}/// <summary>/// 获得⽬录下所有⽂件或指定⽂件类型⽂件(包含所有⼦⽂件夹)/// </summary>/// <param name="path">⽂件夹路径</param>/// <param name="extName">扩展名可以多个例如 .mp3.wma.rm</param>/// <returns>List<FileInfo></returns>public static List<FileInfo> getFile(string path, string extName, List<FileInfo> lst){try{string[] dir = Directory.GetDirectories(path); //⽂件夹列表DirectoryInfo fdir = new DirectoryInfo(path);FileInfo[] file = fdir.GetFiles();//FileInfo[] file = Directory.GetFiles(path); //⽂件列表if (file.Length != 0 || dir.Length != 0) //当前⽬录⽂件或⽂件夹不为空{foreach (FileInfo f in file) //显⽰当前⽬录所有⽂件{if (extName.ToLower().IndexOf(f.Extension.ToLower()) >= 0){lst.Add(f);}}foreach (string d in dir){getFile(d, extName,lst);//递归}}return lst;}catch (Exception ex){throw ex;}}}}效果:以上就是本⽂的全部内容,希望对⼤家的学习有所帮助,也希望⼤家多多⽀持。

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

VC遍历文件夹
摘要:详细介绍了Windows程序设计中遍历文件夹的方法。

关键字:VC遍历文件夹WIN32_FIND_DATA FindFirstFile FindNextFile
利用WIN32_FIND_DATA结构体、FindFirstFile和FindNextFile函数是常用遍历文件夹的方法。

先详细说明结构体和函数的用法,最后在给出示例代码,介绍如何遍历文件夹。

一结构体和函数说明
WIN32_FIND_DATA
typedef struct_WIN32_FIND_DATA{//wfd
DWORD dwFileAttributes;//文件属性
FILETIME ftCreationTime;//创建时间
FILETIME ftLastAccessTime;//最后访问时间
FILETIME ftLastWriteTime;//最后修改的时间
DWORD nFileSizeHigh;//文件长度高32位
DWORD nFileSizeLow;//文件长度低32位
DWORD dwReserved0;//保留
DWORD dwReserved1;//保留
TCHAR cFileName[MAX_PATH];//文件名
TCHAR cAlternateFileName[14];//8.3格式文件名
}WIN32_FIND_DATA;
DWORD dwFileAttributes文件属性说明:
FILE_ATTRIBUTE_ARCHIVE存档
FILE_ATTRIBUTE_COMPRESSED压缩
FILE_ATTRIBUTE_DIRECTORY文件夹
FILE_ATTRIBUTE_ENCRYPTED加密
FILE_ATTRIBUTE_HIDDEN隐藏
FILE_ATTRIBUTE_NORMAL普通没有设置其他属性,就是普通属性
FILE_ATTRIBUTE_OFFLINE脱机
FILE_ATTRIBUTE_READONLY只读
FILE_ATTRIBUTE_REPARSE_POINT reparse point属性
FILE_ATTRIBUTE_SPARSE_FILE稀疏文件
FILE_ATTRIBUTE_SYSTEM系统文件
FILE_ATTRIBUTE_TEMPORARY临时文件
这些都是位标志,所以在判断是否存在这些属性的时候要用位操作。

reparse point属性和稀疏文件的详细说明请参考参考文献【1】23页的内容。

FindFirstFile
HANDLE FindFirstFile(
LPCTSTR lpFileName,//pointer to name of file to search for
LPWIN32_FIND_DATA lpFindFileData//pointer to returned information
);
功能:根据路径获取文件或文件夹的属性。

参数:
LPCTSTR lpFileName文件或文件夹的路径,如果是文件夹最后一个字符不能为‘\’LPWIN32_FIND_DATA lpFindFileData出参,保存指定文件或文件夹的属性。

返回值:
成功返回一个用于文件查询的句柄,失败返回INVALID_HANDLE_VALUE。

说明:
本函数具有匹配查找的功能。

查找的范围是lpFileName指定的最后一层文件夹。

不会进入再下一层的子文件夹进行查找。

在遍历文件夹的时候,是在要遍历的文件夹后面加上“\*.*”,这表示查找任意类型,包括文件夹中的第一层子文件夹(但不会进入子文件夹)。

如果指定“\*.exe”,那么就是查找文件夹下所有exe的文件了。

FindNextFile
BOOL FindNextFile(
HANDLE hFindFile,//handle to search
LPWIN32_FIND_DATA lpFindFileData//pointer to structure for data on found file
);
功能:根据FindFirstFile()或FindFirstFileEx()执行情况,继续搜索文件。

参数:
HANDLE hFindFile查找句柄,FindFirstFile的返回值。

LPWIN32_FIND_DATA lpFindFileData出参,查找到的文件的属性。

返回值:
如果查找到了文件,返回TRUE。

如果没有指定要求的文件,就返回FALSE。

FindClose
BOOL FindClose(
HANDLE hFindFile//file search handle
);
功能:关闭查找句柄。

当不需要再查找后,就用这个函数关闭句柄。

参数:
HANDLE hFindFile查找句柄,FindFirstFile的返回值。

返回值:
成功TRUE,失败FALSE。

二遍历文件夹的示例代
WIN32_FIND_DATA findFileData;
//查找C:\\abc下的所有文件和文件夹
HANDLE hFind=::FindFirstFile(“C:\\abc\\*.*”,&findFileData);
if(INVALID_HANDLE_VALUE==hFind){
return;//失败退出
}
do{
if(strcmp(findFileData.cFileName,”.”)==0||strcmp(findFileData.cFileName,”..”)==0){
continue;//这一段的用法见后面的代码说明
}
MessageBox(findFileData.cFileName);//显示查找到的文件名
}while(::FindNextFile(hFind,&findFileData));//查找下一个文件
FindClose(hFind);//释放FindFirstFile返回的HANDLE
说明:
“.”代表文件夹本身,“..”代表父文件夹。

这两个都是系统文件夹。

我们不能够对这两个文件夹进行处理,否则会出现错误。

所以遇到这两个文件夹就跳过。

参考文献:
【1】《Windows黑客技术揭秘与攻防ⅠC语言篇》裴要强孟波著中国铁道出版社
如果要获取本书的更多信息,请访问博客
/blog/static/237051108201472845652309/
其他更多内容请参考/u/5135093875。

相关文档
最新文档