我用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());
}
}

解决方案 »

  1.   

    Getmodulefilename然后截取\前的字符就是当前目录.
    .. 是系统目录,一个是当前目录,一个表示上级目录。。(不管它,系统的东西)可以用IsDots和IsDirectory来进行判断。
      

  2.   

    .和..基本上属于FAT文件系统遗留下来的,FAT文件系统用这两个项将子目录和父目录联系起来。
      

  3.   

    GetModuleFileName
      

  4.   

    一个进程,有一个当前路径的概念,当前路径不一定是程序可执行文件的路径。当前路径是可以通过SetCurrentDirectory设置来改变的。
    如果是需要自己可执行文件的路径,使用楼上各位提供的方法:GetModuleFileName
      

  5.   

    GetModuleFileName有3个参数,第一个是模块句柄,如果自身是一个单独进程,那么它就是app对象的成员变量m_hInstance;第二个参数是用来接收返回结果的内存块,第3个是内存块的长度。楼主要学会自己看文档。
      

  6.   

    另外,当前路径不止是会被自己的代码改变,也可能被CFileDialog改变。当你成功调用CFileDialog进行文件或路径操作之后,当前路径就会变为CFileDialog中操作的路径。
      

  7.   

    当前目录是个可变路径,之保存最近一次打开过的文件路径,所以使用GetModuleFileName获取程序所在的目录才可以
      

  8.   

    试试我写的这个递归函数 
    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); 
    }