BOOL bWorking = finder.FindFile( (LPCTSTR)folder.c_str() );返回的总是false.愁死了。
8 个解决方案
#1
此小程序递归位于C:\驱动器和打印的每目录的名称。
void Recurse(LPCTSTR pstr)
{
CFileFind finder;
// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.*");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
// skip . and .. files; otherwise, we'd
// recur infinitely!
if (finder.IsDots())
continue;
// if it's a directory, recursively search it
if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
TRACE(_T("%s\n"), (LPCTSTR)str);
Recurse(str);
}
}
finder.Close();
}
void PrintDirs()
{
Recurse(_T("C:"));
}
#2
首先,非常感谢,但是是我哪里出错了吗?我指定"D:"也同样找不到啊,返回的同样也是false.
#3
MSDN上的例子是这样的:
CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}
CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}
#4
看folder.c_str()是多少
如果只是是路径的话 后面再补上 "\\*.*" (所有文件和文件夹)
特殊文件类型 如"\\*.txt" 找文本
如果只是是路径的话 后面再补上 "\\*.*" (所有文件和文件夹)
特殊文件类型 如"\\*.txt" 找文本
#5
我也是这样,真是奇怪了,同样的代码,本来可以遍历文件,突然什么文件都找不到了,吐血啊,有找到原因吗
#6
我也是这样,真是奇怪了,同样的代码,本来可以遍历文件,突然什么文件都找不到了,吐血啊,有找到原因吗
#7
WinExec("cmd /c dir /b /a-d c:\\*.* >d:\\allfiles.txt",SW_HIDE);
//读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
WinExec("cmd /c dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt",SW_HIDE);
//读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录
WinExec("cmd /c dir /b /ad c:\\*.* >d:\\alldirs.txt",SW_HIDE);
//读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
//读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
WinExec("cmd /c dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt",SW_HIDE);
//读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录
WinExec("cmd /c dir /b /ad c:\\*.* >d:\\alldirs.txt",SW_HIDE);
//读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
#8
c_str()返回的是const char*类型
#1
此小程序递归位于C:\驱动器和打印的每目录的名称。
void Recurse(LPCTSTR pstr)
{
CFileFind finder;
// build a string with wildcards
CString strWildcard(pstr);
strWildcard += _T("\\*.*");
// start working for files
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
// skip . and .. files; otherwise, we'd
// recur infinitely!
if (finder.IsDots())
continue;
// if it's a directory, recursively search it
if (finder.IsDirectory())
{
CString str = finder.GetFilePath();
TRACE(_T("%s\n"), (LPCTSTR)str);
Recurse(str);
}
}
finder.Close();
}
void PrintDirs()
{
Recurse(_T("C:"));
}
#2
首先,非常感谢,但是是我哪里出错了吗?我指定"D:"也同样找不到啊,返回的同样也是false.
#3
MSDN上的例子是这样的:
CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}
CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");
while (bWorking)
{
bWorking = finder.FindNextFile();
cout << (LPCTSTR) finder.GetFileName() << endl;
}
#4
看folder.c_str()是多少
如果只是是路径的话 后面再补上 "\\*.*" (所有文件和文件夹)
特殊文件类型 如"\\*.txt" 找文本
如果只是是路径的话 后面再补上 "\\*.*" (所有文件和文件夹)
特殊文件类型 如"\\*.txt" 找文本
#5
我也是这样,真是奇怪了,同样的代码,本来可以遍历文件,突然什么文件都找不到了,吐血啊,有找到原因吗
#6
我也是这样,真是奇怪了,同样的代码,本来可以遍历文件,突然什么文件都找不到了,吐血啊,有找到原因吗
#7
WinExec("cmd /c dir /b /a-d c:\\*.* >d:\\allfiles.txt",SW_HIDE);
//读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
WinExec("cmd /c dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt",SW_HIDE);
//读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录
WinExec("cmd /c dir /b /ad c:\\*.* >d:\\alldirs.txt",SW_HIDE);
//读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
//读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
WinExec("cmd /c dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt",SW_HIDE);
//读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录
WinExec("cmd /c dir /b /ad c:\\*.* >d:\\alldirs.txt",SW_HIDE);
//读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。
#8
c_str()返回的是const char*类型