怎么样获取一个文件夹下的所有文件

benfrog 2006-02-14 04:49:50
谢谢
...全文
1357 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
ysc918 2006-02-14
  • 打赏
  • 举报
回复
用 CFileFind 枚举指定文件夹下的所有文件:

CFileFind finder;
BOOL bWorking = finder.FindFile(strWildcard/*文件名*/);
while (bWorking)
{
bWorking = finder.FindNextFile();

if (finder.IsDots())
continue;
if (!finder.IsDirectory())
{
CString str = finder.GetFilePath();
//MessageBox(str);
//处理文件
}
}

finder.Close();
he_sl 2006-02-14
  • 打赏
  • 举报
回复
忘了贴这个了

// 描述文件查找类型
enum FILEFINDTYPE
{
FILEFINDTYPE_FILE = 0x00000001, // 查找文件
FILEFINDTYPE_FOLDER = 0x00000002, // 查找文件夹

FILEFINDTYPE_ALL = FILEFINDTYPE_FILE | FILEFINDTYPE_FOLDER, // 查找所有
};
折腾_苏州 2006-02-14
  • 打赏
  • 举报
回复
试试这个:
#include <afx.h>
#include <iostream.h>
#include <fstream.h>
int main(int argc, char* argv[])
{
CFileFind fileFind;
ofstream out("d:\\temp.txt",ios::out);
fileFind.FindFile("c:\\*.*",0);
while (fileFind.FindNextFile())
{
cout<<fileFind.GetFileName()<<endl;
out<<fileFind.GetFileName()<<endl;
}
return 0;
}

CFileFind finder;
CTime refTime;
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
cout<<(LPCTSTR) finder.GetCreationTime(refTime );
//refTime是创建时间,自行处理

}


得到当前目录下所有子目录:
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile (_T ("*.*"), &fd);

if (hFind != INVALID_HANDLE_VALUE) {
do {
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
TRACE (_T ("%s\n"), fd.cFileName);
} while (::FindNextFile (hFind, &fd));
::FindClose (hFind);
}


得到某个目录下所有目录及其子目录

void EnumerateFolders ()
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile (_T ("*.*"), &fd);

if (hFind != INVALID_HANDLE_VALUE) {
do {
if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) {
CString name = fd.cFileName;
if (name != _T (".") && name != _T ("..")) {
TRACE (_T ("%s\n"), fd.cFileName);
::SetCurrentDirectory (fd.cFileName);
EnumerateFolders ();
::SetCurrentDirectory (_T (".."));
}
}
} while (::FindNextFile (hFind, &fd));
::FindClose (hFind);
}
}
joinclear 2006-02-14
  • 打赏
  • 举报
回复
FindAllFile(CString strDir)
{

CString strName;
strName.Format("%s\\*.*",strDir); //strDir:要查找的目录
char chFile[MAX_PATH];
char chTemp[MAX_PATH];
CFileFind find;
BOOL bFinished=find.FindFile(strName);

while(bFinished)
{
bFinished =find.FindNextFile();
if (!find.IsDots())
{
strcpy(chTemp, find.GetFileName().GetBuffer(255));
sprintf(chFile, "%s\\%s", strDir, chTemp);

if(find.IsDirectory()) //是子目录
{
FindAllFile(chFile);
}

else //是文件
{
//chFile 为文件的完整路径
CFile file;

strcpy(m_ServerFileInfo[m_nFileCount].filename,chFile);

file.Open(m_ServerFileInfo[m_nFileCount].filename,CFile::modeRead | CFile::typeBinary);

m_ServerFileInfo[m_nFileCount].filelength = file.GetLength();

file.Close();

m_nFileCount++;

}
}
}
find.Close();
}
he_sl 2006-02-14
  • 打赏
  • 举报
回复
// 描述文件查找参数
class CFileFindParam
{
public:
CFileFindParam()
{
strBaseFolder = _T(""); // 要检查的文件夹
fileFindType = FILEFINDTYPE_ALL; // 文件查找类型
strMatched = _T(""); // 匹配字符串
}

virtual ~CFileFindParam(){}


public:
CString strBaseFolder; // 要检查的文件夹
FILEFINDTYPE fileFindType; // 文件查找类型
CString strMatched; // 匹配字符串
};


void SearchFile(CFileFindParam& fileFindParam, CStringArray& saResult);// 文件(或文件夹)查找


///////////////////////////////////////////////////////////////
// 函 数 名 : SearchFile
// 所属类名 : HeslUtils
// 函数功能 : 文件(或文件夹)查找
// 处理过程 :
// 备 注 :
// 作 者 : hesl
// 时 间 : 2005年5月10日
// 返 回 值 : void
// 参数说明 : CFileFindParam& fileFindParam——[in]记录文件查找参数
// CStringArray& saResult——[out]记录文件查找结果
///////////////////////////////////////////////////////////////
void HeslUtils::SearchFile(CFileFindParam& fileFindParam, CStringArray& saResult)
{
fileFindParam.strMatched.TrimLeft();
fileFindParam.strMatched.TrimRight();
fileFindParam.strMatched.MakeLower();

CFileFind finder;
BOOL bFound;


// 1、检查指定目录下的所有子目录及其文件
CString strFullMask = fileFindParam.strBaseFolder + _T("\\*.*");
bFound = finder.FindFile(strFullMask);
if(!bFound)
// 指定目录不存在
{
finder.Close();
return;
}

while(bFound)
// 指定目录存在
{
bFound = finder.FindNextFile();
if(!finder.IsDots())
// 不是.Or..
{
CString strFullPath = fileFindParam.strBaseFolder + _T("\\") + finder.GetFileName();
if(finder.IsDirectory())
// 子目录——递归检查子目录
{
CFileFindParam subFileFindParam = fileFindParam;
subFileFindParam.strBaseFolder = strFullPath;

SearchFile(subFileFindParam, saResult);
}
else
// 子文件——直接添加子文件
{
if(fileFindParam.fileFindType & FILEFINDTYPE_FILE)
{
if(!fileFindParam.strMatched.IsEmpty())
{
strFullPath.MakeLower();
if(strFullPath.Find(fileFindParam.strMatched) != -1)
{
saResult.Add(strFullPath);
}
}
else
{
saResult.Add(strFullPath);
}
}
}
}
}

finder.Close();


// 2、检查当前目录
if(fileFindParam.fileFindType & FILEFINDTYPE_FOLDER)
{
if(!fileFindParam.strMatched.IsEmpty())
{
fileFindParam.strBaseFolder.MakeLower();
if(fileFindParam.strBaseFolder.Find(fileFindParam.strMatched) != -1)
{
saResult.Add(fileFindParam.strBaseFolder);
}
}
else
{
saResult.Add(fileFindParam.strBaseFolder);
}
}
}

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧