CFileFind.FindFile总是一个文件都找不到。在线等。

时间:2020-12-04 22:09:23
创建的是控制台工程,用的是VS2010.例子是MSDN拷贝下来的,无论怎么试,
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


引用 1 楼 lhfslhfs 的回复:
此小程序递归位于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:"));
}


引用 1 楼 lhfslhfs 的回复:
此小程序递归位于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:"));
}


首先,非常感谢,但是是我哪里出错了吗?我指定"D:"也同样找不到啊,返回的同样也是false.

#3


MSDN上的例子是这样的:
   CFileFind finder;
   BOOL bWorking = finder.FindFile("*.*");
   while (bWorking)
   {
      bWorking = finder.FindNextFile();
      cout << (LPCTSTR) finder.GetFileName() << endl;
   }

#4


看folder.c_str()是多少
 如果只是是路径的话 后面再补上 "\\*.*" (所有文件和文件夹)
 特殊文件类型 如"\\*.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命令不会。

#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


引用 1 楼 lhfslhfs 的回复:
此小程序递归位于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:"));
}


引用 1 楼 lhfslhfs 的回复:
此小程序递归位于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:"));
}


首先,非常感谢,但是是我哪里出错了吗?我指定"D:"也同样找不到啊,返回的同样也是false.

#3


MSDN上的例子是这样的:
   CFileFind finder;
   BOOL bWorking = finder.FindFile("*.*");
   while (bWorking)
   {
      bWorking = finder.FindNextFile();
      cout << (LPCTSTR) finder.GetFileName() << endl;
   }

#4


看folder.c_str()是多少
 如果只是是路径的话 后面再补上 "\\*.*" (所有文件和文件夹)
 特殊文件类型 如"\\*.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命令不会。

#8


c_str()返回的是const char*类型