我用FIndFile查找指定文件夹的所有文件名的时候,发生一些问题,如下:
FINDFILE函数的相对路径 我给成了"\*.*",这个意思是不是当前.exe程序的同目录下的所有文件,可是程序运行结构却是找到了该盘根目录的所有文件了,这是为什么啊?。
还有另个问题找到的文件夹命名没有".."和"."这种文件名的文件,为什么GetFileName() 会返回"."和"..",很不解,请高手解释下
代码如下:
CString strtemp;
if(strPath.Right(1)!="\\")
strtemp.Format("%s\\*.*",strPath);
else
strtemp.Format("%s*.*",strPath);
CFileFind findfile;
BOOL bfind=findfile.FindFile(strtemp);//这里是用的相对路径,然而找到的地方不对
while(bfind)
{
bfind=findfile.FindNextFile();
if(findfile.GetFileName() !="." && findfile.GetFileName() !=".." ){
Combo_Type->AddString(findfile.GetFileName());
}
}
FINDFILE函数的相对路径 我给成了"\*.*",这个意思是不是当前.exe程序的同目录下的所有文件,可是程序运行结构却是找到了该盘根目录的所有文件了,这是为什么啊?。
还有另个问题找到的文件夹命名没有".."和"."这种文件名的文件,为什么GetFileName() 会返回"."和"..",很不解,请高手解释下
代码如下:
CString strtemp;
if(strPath.Right(1)!="\\")
strtemp.Format("%s\\*.*",strPath);
else
strtemp.Format("%s*.*",strPath);
CFileFind findfile;
BOOL bfind=findfile.FindFile(strtemp);//这里是用的相对路径,然而找到的地方不对
while(bfind)
{
bfind=findfile.FindNextFile();
if(findfile.GetFileName() !="." && findfile.GetFileName() !=".." ){
Combo_Type->AddString(findfile.GetFileName());
}
}
.. 是系统目录,一个是当前目录,一个表示上级目录。。(不管它,系统的东西)可以用IsDots和IsDirectory来进行判断。
如果是需要自己可执行文件的路径,使用楼上各位提供的方法:GetModuleFileName
void FindAllFilesInPath(LPCTSTR strPath)
{
HANDLE hFile;
WIN32_FIND_DATA fndInfo;
char strPathName[MAX_PATH];
memset(strPathName, 0, MAX_PATH);
sprintf(strPathName, "%s\\*.*", strPath);
hFile = ::FindFirstFile(strPathName, &fndInfo);
do
{
if(hFile==INVALID_HANDLE_VALUE)
return;
else
{
if(fndInfo.cFileName[0]=='.')
continue;
char strNewName[MAX_PATH];
memset(strNewName, 0, MAX_PATH);
sprintf(strNewName, "%s\\%s", strPath, fndInfo.cFileName);
//如果是子目录,则递归搜索
if(fndInfo.dwFileAttributes&FILE_ATTRIBUTE_DIRECTORY)
FindAllFilesInPath(strNewName);
else//如果是文件
{
自己处理
}
}
}
while( ::FindNextFile(hFile, &fndInfo) );
::FindClose(hFile);
}