网上有一些例程,但小弟想自己写练手,高手见笑了.完整代码如下:
#include <afxwin.h>#include <iostream.h>
#include <windows.h>
#include <vector>
#include <string>
using namespace std;int findfile(LPCSTR DirctoryPath,vector<string> &filelist)
{
WIN32_FIND_DATA FindFileData;
string combopath,filepath=DirctoryPath;
BOOL result=-1;
::SetCurrentDirectory(DirctoryPath);//设置搜索目录路径
HANDLE hr=FindFirstFile("*.*",&FindFileData);
if(filepath.at(filepath.length()-1)=='\\')
filepath=filepath.substr(0,filepath.length()-1);//如果是根目录就去尾
if (hr!=INVALID_HANDLE_VALUE)
while (result)//如果DirctoryPath是一个错误路,函数将返回-1
{
combopath=filepath;//恢得当前目录信息
if(strcmp(FindFileData.cFileName,".") 
&& strcmp(FindFileData.cFileName,".."))//过滤圆点目录
{
combopath=combopath+"\\"+FindFileData.cFileName;//生成完整路径
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
findfile(combopath.c_str(),filelist);//递归搜索子目录
else
filelist.push_back(combopath);//存储搜索到的文档名
}
result=(int)FindNextFile(hr,&FindFileData);//进行下一步搜索
}
return result;
}int main(int argc, char* argv[])
{
vector<string> pathlist;//将所有得到的路径串存储到一个向量中
findfile("c:\\",pathlist);
CString str;
CStdioFile file("c:\\list.txt",CFile::modeCreate|CFile::modeWrite|CFile::shareDenyNone);
int i=1;
for(vector<string>::iterator it=pathlist.begin();it!=pathlist.end();++it)//处理所得串,写入列表文件
{
str.Format("%d-%s\n",i++,(*it).data());
file.WriteString(str);
}
file.Close();
return 0;
}

解决方案 »

  1.   

    ::SetCurrentDirectory(DirctoryPath);//设置搜索目录路径
    是不是应该放到外边去?要不然每次都设置当前目录为DirtoryPath
      

  2.   

    sorry,好像我说错了
    8过我觉得流程好像有问题
    这里有个例子
    http://programlife.533.net/12.txt
    我不瞎说了,洗洗睡了
      

  3.   

    楼上兄弟直管说,咱们又不是学究,对个大概就可以了.只是这个例子困扰我好长时间了,不想照搬网上的例子,想用纯API+STL写一个出来试试.哪知被windows打了个叉,忧闷.
      

  4.   

    int cnt = 0;
    BOOL FindFile(CString filePatch)
    {
    CString path = filePatch;
    filePatch += "\\*"; WIN32_FIND_DATA wfd;
    HANDLE hFirst = FindFirstFile(filePatch, &wfd);
    do
    {
    if (strcmp(wfd.cFileName, ".") == 0 || strcmp(wfd.cFileName, "..") == 0)
    continue; if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
    {
    CString str;
    str = path + "\\" + CString(wfd.cFileName);
    FindFile(str);
    }
    else
    {
    TRACE("%s\\%s\n", path, wfd.cFileName);
    cnt++;
    }
    } while(FindNextFile(hFirst, &wfd)); FindClose(hFirst);
    return true;
    }在函数中
    {
    FindFile("c:");
    int fileCount = cnt;
    }