20 个解决方案
#1
CFileFind::FindFile/FileNextFile()
#2
给你一段代码参考一下:
// 删除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 );
}
#3
MFC中有一个类CFileFind,使用它进行文件的查找。
CString strFile;
CFileFind find;
BOOL bWorking = find.FindFile("C:/windows/*.txt");//这是搜索C:/WIndows的txt
while(bWorking)
{
bWorking=find.FindNextFile();
strFile=find.GetFileName();
}
CString strFile;
CFileFind find;
BOOL bWorking = find.FindFile("C:/windows/*.txt");//这是搜索C:/WIndows的txt
while(bWorking)
{
bWorking=find.FindNextFile();
strFile=find.GetFileName();
}
#4
当然上面的代码只能搜索这一级文件夹的txt、
#5
先遍历一个目录下所有的文件和文件夹,然后获得文件夹和文件夹名之后,就是一个字符串处理的问题了,也就是判断名字的后4个位置的内容是不是.txt就可以了
#6
我就是要写死在一个目录下的TXT文件读取,na
这个FindNextName需要参数啊好像要
#7
2楼已经给出代码了,可以参考
#8
当然2楼的代码是删除文件功能,你可以借鉴修改。
#9
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>访问中文字符
#10
不需要判断扩展名,直接搜索 *.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;
}
#11
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命令不会。
//读文件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命令不会。
#12
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>访问中文字符
你看看我的代码,我想尝试遍历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);
}
#13
当然2楼的代码是删除文件功能,你可以借鉴修改。
能帮我看看我的代码问题在哪吗,总是报内存不能为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);
}
}
#14
CFileFind::FindFile/FileNextFile()
版主大人,我现在能读取单个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);
}
}
#15
void RecurseFiles(LPCTSTR lpszDir, LPCTSTR lpszExtension, HWND hEdit)
{
ASSERT(NULL != lpszDir);
ASSERT(NULL != lpszDir);
ASSERT(NULL != hEdit);
CFileFind finder;
// build a string with wildcards
CString strWildcard(lpszDir);
strWildcard += _T("\\*.*");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
{
continue;
}
CString strPath(finder.GetFilePath());
if(finder.IsDirectory())
{
RecurseFiles(strPath, lpszExtension, hEdit);
}
else
{
if(0 == strPath.Right(_tcslen(lpszExtension)).CompareNoCase(lpszExtension))
{
strPath += _T("\r\n");
SendMessage(hEdit, EM_SETSEL, -1, -1);
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)(LPCTSTR)strPath);
}
}
}
finder.Close();
}
// call
HWND hEdit = (HWND)(GetDlgItem(IDC_EDIT1)->GetSafeHwnd());
RecurseFiles(_T("G:"), _T("txt"), hEdit);
#16
CFileFind::FindFile/FileNextFile()
调用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)
#17
void RecurseFiles(LPCTSTR lpszDir, LPCTSTR lpszExtension, HWND hEdit)
{
ASSERT(NULL != lpszDir);
ASSERT(NULL != lpszDir);
ASSERT(NULL != hEdit);
CFileFind finder;
// build a string with wildcards
CString strWildcard(lpszDir);
strWildcard += _T("\\*.*");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
{
continue;
}
CString strPath(finder.GetFilePath());
if(finder.IsDirectory())
{
RecurseFiles(strPath, lpszExtension, hEdit);
}
else
{
if(0 == strPath.Right(_tcslen(lpszExtension)).CompareNoCase(lpszExtension))
{
strPath += _T("\r\n");
SendMessage(hEdit, EM_SETSEL, -1, -1);
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)(LPCTSTR)strPath);
}
}
}
finder.Close();
}
// call
HWND hEdit = (HWND)(GetDlgItem(IDC_EDIT1)->GetSafeHwnd());
RecurseFiles(_T("G:"), _T("txt"), hEdit);
编译问题处理好了,调用后在编辑框内我捕捉到得怎么是txt的文件名呀?
#18
当然上面的代码只能搜索这一级文件夹的txt、
我就是要写死在一个目录下的TXT文件读取,na MFC中有一个类CFileFind,使用它进行文件的查找。
CString strFile;
CFileFind find;
BOOL bWorking = find.FindFile("C:/windows/*.txt");//这是搜索C:/WIndows的txt
while(bWorking)
{
bWorking=find.FindNextFile();
strFile=find.GetFileName();
}
这个FindNextName需要参数啊好像要
不需要、
#19
这里都是给出与你相关的知识,建议自己去找找方法,好比让我们给代码,一个字乱。
#20
这里都是给出与你相关的知识,建议自己去找找方法,好比让我们给代码,一个字乱。
谢谢
#21
#1
CFileFind::FindFile/FileNextFile()
#2
给你一段代码参考一下:
// 删除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 );
}
#3
MFC中有一个类CFileFind,使用它进行文件的查找。
CString strFile;
CFileFind find;
BOOL bWorking = find.FindFile("C:/windows/*.txt");//这是搜索C:/WIndows的txt
while(bWorking)
{
bWorking=find.FindNextFile();
strFile=find.GetFileName();
}
CString strFile;
CFileFind find;
BOOL bWorking = find.FindFile("C:/windows/*.txt");//这是搜索C:/WIndows的txt
while(bWorking)
{
bWorking=find.FindNextFile();
strFile=find.GetFileName();
}
#4
当然上面的代码只能搜索这一级文件夹的txt、
#5
先遍历一个目录下所有的文件和文件夹,然后获得文件夹和文件夹名之后,就是一个字符串处理的问题了,也就是判断名字的后4个位置的内容是不是.txt就可以了
#6
当然上面的代码只能搜索这一级文件夹的txt、
我就是要写死在一个目录下的TXT文件读取,na
MFC中有一个类CFileFind,使用它进行文件的查找。
CString strFile;
CFileFind find;
BOOL bWorking = find.FindFile("C:/windows/*.txt");//这是搜索C:/WIndows的txt
while(bWorking)
{
bWorking=find.FindNextFile();
strFile=find.GetFileName();
}
这个FindNextName需要参数啊好像要
#7
当然上面的代码只能搜索这一级文件夹的txt、
我就是要写死在一个目录下的TXT文件读取,na MFC中有一个类CFileFind,使用它进行文件的查找。
CString strFile;
CFileFind find;
BOOL bWorking = find.FindFile("C:/windows/*.txt");//这是搜索C:/WIndows的txt
while(bWorking)
{
bWorking=find.FindNextFile();
strFile=find.GetFileName();
}
这个FindNextName需要参数啊好像要
2楼已经给出代码了,可以参考
#8
当然2楼的代码是删除文件功能,你可以借鉴修改。
#9
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>访问中文字符
#10
不需要判断扩展名,直接搜索 *.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;
}
#11
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命令不会。
//读文件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命令不会。
#12
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>访问中文字符
你看看我的代码,我想尝试遍历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);
}
#13
当然2楼的代码是删除文件功能,你可以借鉴修改。
能帮我看看我的代码问题在哪吗,总是报内存不能为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);
}
}
#14
CFileFind::FindFile/FileNextFile()
版主大人,我现在能读取单个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);
}
}
#15
void RecurseFiles(LPCTSTR lpszDir, LPCTSTR lpszExtension, HWND hEdit)
{
ASSERT(NULL != lpszDir);
ASSERT(NULL != lpszDir);
ASSERT(NULL != hEdit);
CFileFind finder;
// build a string with wildcards
CString strWildcard(lpszDir);
strWildcard += _T("\\*.*");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
{
continue;
}
CString strPath(finder.GetFilePath());
if(finder.IsDirectory())
{
RecurseFiles(strPath, lpszExtension, hEdit);
}
else
{
if(0 == strPath.Right(_tcslen(lpszExtension)).CompareNoCase(lpszExtension))
{
strPath += _T("\r\n");
SendMessage(hEdit, EM_SETSEL, -1, -1);
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)(LPCTSTR)strPath);
}
}
}
finder.Close();
}
// call
HWND hEdit = (HWND)(GetDlgItem(IDC_EDIT1)->GetSafeHwnd());
RecurseFiles(_T("G:"), _T("txt"), hEdit);
#16
CFileFind::FindFile/FileNextFile()
调用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)
#17
void RecurseFiles(LPCTSTR lpszDir, LPCTSTR lpszExtension, HWND hEdit)
{
ASSERT(NULL != lpszDir);
ASSERT(NULL != lpszDir);
ASSERT(NULL != hEdit);
CFileFind finder;
// build a string with wildcards
CString strWildcard(lpszDir);
strWildcard += _T("\\*.*");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
if (finder.IsDots())
{
continue;
}
CString strPath(finder.GetFilePath());
if(finder.IsDirectory())
{
RecurseFiles(strPath, lpszExtension, hEdit);
}
else
{
if(0 == strPath.Right(_tcslen(lpszExtension)).CompareNoCase(lpszExtension))
{
strPath += _T("\r\n");
SendMessage(hEdit, EM_SETSEL, -1, -1);
SendMessage(hEdit, EM_REPLACESEL, 0, (LPARAM)(LPCTSTR)strPath);
}
}
}
finder.Close();
}
// call
HWND hEdit = (HWND)(GetDlgItem(IDC_EDIT1)->GetSafeHwnd());
RecurseFiles(_T("G:"), _T("txt"), hEdit);
编译问题处理好了,调用后在编辑框内我捕捉到得怎么是txt的文件名呀?
#18
当然上面的代码只能搜索这一级文件夹的txt、
我就是要写死在一个目录下的TXT文件读取,na MFC中有一个类CFileFind,使用它进行文件的查找。
CString strFile;
CFileFind find;
BOOL bWorking = find.FindFile("C:/windows/*.txt");//这是搜索C:/WIndows的txt
while(bWorking)
{
bWorking=find.FindNextFile();
strFile=find.GetFileName();
}
这个FindNextName需要参数啊好像要
不需要、
#19
这里都是给出与你相关的知识,建议自己去找找方法,好比让我们给代码,一个字乱。
#20
这里都是给出与你相关的知识,建议自己去找找方法,好比让我们给代码,一个字乱。
谢谢