给你一段代码参考一下:
// 删除15天之前的log日志文件
void DeleteLogFile( LPCTSTR strLogPath )
{
if ( !PathFileExists( strLogPath ) )
{
return;
} time_t tCurTime = time( NULL ); // 获取当前时间 tstring strFindFileName = strLogPath;
strFindFileName += _T("\\*.*");
WIN32_FIND_DATA wfd;
HANDLE hFindFile = FindFirstFile( strFindFileName.c_str(), &wfd ); 
if ( hFindFile == INVALID_HANDLE_VALUE )

return;
} while ( true )
{
if ( wfd.cFileName[0] != _T('.') )
{// 非本级或上级目录
if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) // 目录
{
if ( !FindNextFile( hFindFile, &wfd ) )
{
break;
}
continue;
}
else if ( wfd.dwFileAttributes & FILE_ATTRIBUTE_SYSTEM ) // 系统文件,不处理
{
if ( !FindNextFile( hFindFile, &wfd ) )
{
break;
}
continue;
}
else // 用户日志文件
{
tstring strLogFile = strLogPath;
strLogFile += _T("\\");
strLogFile += wfd.cFileName;     time_t tModifyTime = GetFileModifyTime( strLogFile.c_str() ); // 如果是15天之前的文件,则将之删除掉(拿当前时间和文件的最后修改时间作比较)
if ( tCurTime - tModifyTime > DELETE_INTERVAL_SECOND )
{
DeleteFile( strLogFile.c_str() );
}
}
} if ( !FindNextFile( hFindFile, &wfd ) )
{
break;
}
}; FindClose( hFindFile );
}

解决方案 »

  1.   

      MFC中有一个类CFileFind,使用它进行文件的查找。
     
      CString strFile;
     
      CFileFind find;
     
      BOOL bWorking = find.FindFile("C:/windows/*.txt");//这是搜索C:/WIndows的txt
     
      while(bWorking)
     
      {
     
      bWorking=find.FindNextFile();
     
      strFile=find.GetFileName();
     
      }
      

  2.   

    当然上面的代码只能搜索这一级文件夹的txt、
      

  3.   

    先遍历一个目录下所有的文件和文件夹,然后获得文件夹和文件夹名之后,就是一个字符串处理的问题了,也就是判断名字的后4个位置的内容是不是.txt就可以了
      

  4.   

    我就是要写死在一个目录下的TXT文件读取,na这个FindNextName需要参数啊好像要
      

  5.   

    我就是要写死在一个目录下的TXT文件读取,na这个FindNextName需要参数啊好像要
    2楼已经给出代码了,可以参考
      

  6.   

    CFileFind finder;
    BOOL bFind = finder.FindFile(m_filepath);
    if(bFind!=0)
    {
    CStdioFile LogFile;
    char* old_locale=_strdup( setlocale(LC_CTYPE,NULL) );
    setlocale( LC_CTYPE,"chs");
    CString strRow;
    LogFile.Open(m_filepath,CFile::modeRead);
    while(LogFile.ReadString(strRow))
    { m_strModelContent=m_strModelContent+strRow+_T("\n");
    }
    setlocale( LC_CTYPE, old_locale ); //还原语言区域的设置
    free( old_locale );//还原区域设定
    }加头文件 #include <locale.h>访问中文字符
      

  7.   

    不需要判断扩展名,直接搜索 *.txt 就行了。比如搜索 C:\Windows\*.exe。#include <stdio.h>
    #include <windows.h>
    #include <shlwapi.h>
    #pragma comment(lib, "shlwapi.lib")
    #include <tchar.h>int _tmain(int argc, TCHAR *argv[])
    {
    HANDLE hFind = INVALID_HANDLE_VALUE;
        TCHAR szPath[] = TEXT("C:\\Windows");
        TCHAR szFind[MAX_PATH] = { 0 };
        WIN32_FIND_DATA wfd = { 0 };
        
        PathCombine(szFind, szPath, TEXT("*.exe"));
        hFind = FindFirstFile(szFind, &wfd);
        if (hFind != INVALID_HANDLE_VALUE) {
            TCHAR szFile[MAX_PATH] = { 0 };
            do {
                PathCombine(szFile, szPath, wfd.cFileName);
                _tprintf(TEXT("%s\n"), szFile);
            } while (FindNextFile(hFind, &wfd));
            FindClose(hFind);
        }
        return 0;
    }
      

  8.   

    system("dir /b /a-d c:\\*.* >d:\\allfiles.txt");
    //读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
    system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt");
    //读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录
    system("dir /b /ad  c:\\*.* >d:\\alldirs.txt");
    //读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
    请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
      

  9.   

    你看看我的代码,我想尝试遍历txt文件后,把文件里的文本保存下来,因为我后门要把这个文本插入数据库的,但是现在一点击按钮触发事件就终止运行
    void CTestDlg::OnButton2() 
    {
    // TODO: Add your control notification handler code here
    CFileFind finder;
    CString m_strModelContent="";

    BOOL bFind = finder.FindFile("D:/abc/*.txt");
    if(bFind!=0)
    {
    CStdioFile LogFile;
    CString filepath=finder.GetFilePath();
    char* old_locale=_strdup( setlocale(LC_CTYPE,NULL) );
    setlocale( LC_CTYPE,"chs");
    CString strRow;
    LogFile.Open(filepath,CFile::modeRead);
    while(LogFile.ReadString(strRow))
    { m_strModelContent=m_strModelContent+strRow+_T("\n");
    }

    setlocale( LC_CTYPE, old_locale ); //还原语言区域的设置
    free( old_locale );//还原区域设定
    }
    GetDlgItem(IDC_EDIT1)->SetWindowText(m_strModelContent);
    }
      

  10.   

    能帮我看看我的代码问题在哪吗,总是报内存不能为read那种错误
    void CTestDlg::OnButton1() 
    {

    CString strFile;
    CFileFind find;
    CString sFileName;
    CStdioFile out;  
    HANDLE h;
    WIN32_FIND_DATA p;
    BOOL bWorking = find.FindFile("D:/abc/*.txt");
    while (bWorking)
    {   
    bWorking=FindNextFile(h,&p);
           sFileName=find.GetFilePath();
    out.Open(sFileName, CFile::modeRead); 
    CString sSql="",s; //读取文件
    do{  out.ReadString(s);  sSql=sSql+s+(char)10; }  
    while (out.GetPosition()!=out.GetLength()); 
    out.Close();  
    GetDlgItem(IDC_EDIT1)->SetWindowText(sSql);
    }}
      

  11.   

    版主大人,我现在能读取单个txt文件里的文本,然后保存下来,但是一遍历某目录下所有的txt文件就不成功,可否帮看看代码哪里除了问题,谢谢void CTestDlg::OnButton1() 
    {

    CString strFile;
    CFileFind find;
    CString sFileName;
    CStdioFile out;  
    HANDLE h;
    WIN32_FIND_DATA p;
    BOOL bWorking = find.FindFile("D:/abc/*.txt");
    while (bWorking)
    {   
    bWorking=FindNextFile(h,&p);
           sFileName=find.GetFilePath();
    out.Open(sFileName, CFile::modeRead); 
    CString sSql="",s; //读取文件
    do{  out.ReadString(s);  sSql=sSql+s+(char)10; }  
    while (out.GetPosition()!=out.GetLength()); 
    out.Close();  
    GetDlgItem(IDC_EDIT1)->SetWindowText(sSql);
    }}
      

  12.   

    本帖最后由 VisualEleven 于 2014-07-18 13:40:53 编辑
      

  13.   

    调用recurseFiles函数写在按钮响应里,但是编译无法通过,错误如下,是不是我的recersefiles函数定义有问题?求教
    test1Dlg.obj : error LNK2001: unresolved external symbol "protected: virtual void __thiscall CTest1Dlg::RecurseFiles(char const *,char const *,struct HWND__ *)" (?RecurseFiles@CTest1Dlg@@MAEXPBD0PAUHWND__@@@Z)
      

  14.   

    编译问题处理好了,调用后在编辑框内我捕捉到得怎么是txt的文件名呀?
      

  15.   

    我就是要写死在一个目录下的TXT文件读取,na这个FindNextName需要参数啊好像要
    不需要、