如何得到一个目录里所有的文件 同上 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 FindFirstFile & FindNextFile void CBackupPage::FindProc(char *szPath){//查找目录下文件 CString sName; WIN32_FIND_DATA pfFind; HANDLE hFind; char szFind[256]; char szFileName[256]; sprintf(szFind,"%s*.*",szPath); pfFind.dwFileAttributes &= ~FILE_ATTRIBUTE_DIRECTORY; hFind = FindFirstFile(szFind,&pfFind); while(hFind!=INVALID_HANDLE_VALUE) { if(!(pfFind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { sprintf(szFileName,"%s%s",szPath,pfFind.cFileName); sName = szFileName; } if(!FindNextFile(hFind,&pfFind)) break; } FindClose(hFind);//归递查找子目录下的文件。 char szFullPath[256]; pfFind.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY; sprintf(szFind,"%s*.",szPath); hFind = FindFirstFile(szFind,&pfFind); while(hFind!=INVALID_HANDLE_VALUE) { if(pfFind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { strcpy(szFileName,pfFind.cFileName); if(strcmp(szFileName,".")&&strcmp(szFileName,"..")) { sprintf(szFullPath,"%s%s\\",szPath,szFileName); FindProc(szFullPath); } } if(!FindNextFile(hFind,&pfFind)) break; } FindClose(hFind);} 牙医的方法不错,我也来加一个://如果sPath为目录,就继续检查他的是否仍然有下一级子目录; //参数bInTheSameDir表示目标文件的路径是否与源文件一致。void CTRSRichEditorDoc::SearchDirectory(LPCTSTR Path){ CString sPath=Path; if(sPath.Right(1)!='\\') { sPath += "\\"; } FindFiles(sPath); sPath+="*.*"; CFileFind ff; BOOL bWorking = ff.FindFile(sPath); if (!bWorking) return; while (bWorking) { bWorking = ff.FindNextFile(); if (ff.IsDots()) continue; if (ff.IsDirectory()){ CString str=ff.GetFilePath(); str+='\\'; SearchDirectory(str); } }}CStringArray m_arrType;可以在这个数组中加入要搜索的文件后缀类型,例如:“*.doc”、“*.rtf”//如果sPath为文件,就自动搜索是否符合后缀要求,符合就添加到列表中; void CTRSRichEditorDoc::FindFiles(CString sPath){ CString sDestPath=""; CString sExt;//记录后缀 int nExtLen = 0; CString sFileName = ""; int size=m_arrType.GetSize(); for(int i=0;i<size;i++){ CString TmpPath; TmpPath=sPath; sExt = m_arrType[i];//加上对文件类型的判断 TmpPath+=sExt; sExt = sExt.Mid(1);//去掉“*”. nExtLen = sExt.GetLength(); CFileFind ff; BOOL bWorking = ff.FindFile(TmpPath); if (!bWorking && i<size ) continue; else if(!bWorking && i>=size) return; while (bWorking) { bWorking = ff.FindNextFile(); if (ff.IsDots()) { continue; } if (ff.IsDirectory()){ //this is impossible. continue; } if (!ff.IsDirectory()) //file { sFileName = ff.GetFilePath(); m_arrFileName.Add(sFileName); } } }} 高手指点:VC6中如何在线程中连接SQL数据库 控制台程序的问题 默认按钮的问题 把一个.EXE的文件拷到其他机子上,当双击运行它的时候,是不是可以在那台机子上注册呢? 急求wpcap.lib和packet.lib,拜托了!!! 求救!如何在客户区的某个区域嵌入flash啊 如何监视另一个进程的内存变化 请教大侠 求解决vs2008 vc MCSComm不能发送大于3F的16进制? 关于求圆周率,开方的问题... 送分:如何选择是debug还是release版本??? 如何在读入的文件中插入一行
{
//查找目录下文件
CString sName;
WIN32_FIND_DATA pfFind;
HANDLE hFind;
char szFind[256];
char szFileName[256];
sprintf(szFind,"%s*.*",szPath);
pfFind.dwFileAttributes &= ~FILE_ATTRIBUTE_DIRECTORY;
hFind = FindFirstFile(szFind,&pfFind);
while(hFind!=INVALID_HANDLE_VALUE)
{
if(!(pfFind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
sprintf(szFileName,"%s%s",szPath,pfFind.cFileName);
sName = szFileName;
}
if(!FindNextFile(hFind,&pfFind))
break;
}
FindClose(hFind);
//归递查找子目录下的文件。
char szFullPath[256];
pfFind.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY;
sprintf(szFind,"%s*.",szPath);
hFind = FindFirstFile(szFind,&pfFind);
while(hFind!=INVALID_HANDLE_VALUE)
{
if(pfFind.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
strcpy(szFileName,pfFind.cFileName);
if(strcmp(szFileName,".")&&strcmp(szFileName,".."))
{
sprintf(szFullPath,"%s%s\\",szPath,szFileName);
FindProc(szFullPath);
}
}
if(!FindNextFile(hFind,&pfFind))
break;
}
FindClose(hFind);
}
//如果sPath为目录,就继续检查他的是否仍然有下一级子目录;
//参数bInTheSameDir表示目标文件的路径是否与源文件一致。
void CTRSRichEditorDoc::SearchDirectory(LPCTSTR Path)
{
CString sPath=Path;
if(sPath.Right(1)!='\\')
{
sPath += "\\";
}
FindFiles(sPath);
sPath+="*.*";
CFileFind ff;
BOOL bWorking = ff.FindFile(sPath);
if (!bWorking) return;
while (bWorking)
{
bWorking = ff.FindNextFile();
if (ff.IsDots())
continue;
if (ff.IsDirectory()){
CString str=ff.GetFilePath();
str+='\\';
SearchDirectory(str);
}
}
}CStringArray m_arrType;可以在这个数组中加入要搜索的文件后缀类型,例如:“*.doc”、“*.rtf”
//如果sPath为文件,就自动搜索是否符合后缀要求,符合就添加到列表中;
void CTRSRichEditorDoc::FindFiles(CString sPath)
{
CString sDestPath="";
CString sExt;//记录后缀
int nExtLen = 0;
CString sFileName = "";
int size=m_arrType.GetSize();
for(int i=0;i<size;i++){
CString TmpPath;
TmpPath=sPath;
sExt = m_arrType[i];//加上对文件类型的判断
TmpPath+=sExt;
sExt = sExt.Mid(1);//去掉“*”.
nExtLen = sExt.GetLength();
CFileFind ff;
BOOL bWorking = ff.FindFile(TmpPath);
if (!bWorking && i<size ) continue;
else if(!bWorking && i>=size) return;
while (bWorking)
{
bWorking = ff.FindNextFile();
if (ff.IsDots())
{
continue;
}
if (ff.IsDirectory()){ //this is impossible.
continue;
}
if (!ff.IsDirectory()) //file
{
sFileName = ff.GetFilePath();
m_arrFileName.Add(sFileName);
}
}
}
}