MFC,查找特定文件类型

时间:2017-07-18 14:43:55

标签: c++ mfc

我有一个方法可以打开已保存的设置文件(当点击文件 - >打开时),我打算在打开另一组文件时自动打开文件。

为了做到这一点,我想计算一个文件夹中我有多少特定类型的文件,以确保只有1个。 文件夹中还有其他文件类型,所以我需要一种方法来绕过它们。

我已经有了该文件夹的路径,但是有一种简单的方法来搜索文件类型吗?甚至可能得到他们的名字?

我是MFC的新手,虽然它已经老了,但在我想要的具体领域找不到多少帮助。 谢谢!

编辑(澄清) - 例如,假设我有一个包含3个word文档和一个文本文件的文件夹。我希望它能够搜索文件夹,并说有3个文件是.docx或1个文件是.txt(取决于我告诉它搜索的内容)。如果我可以保存其中一个找到的文件的名称,那就太好了。

2 个答案:

答案 0 :(得分:0)

我希望用CFileFind解决它。 以下是使用CFileFind的示例。

CFileFind finder;
static const TCHAR szFileToFind[] = _T("C:\\WINDOWS\\SYSTEM.INI");

BOOL bResult = finder.FindFile(szFileToFind);

if (bResult)
{
    finder.FindNextFile();

    TRACE(_T("Root of %s is %s\n"), szFileToFind, (LPCTSTR)finder.GetRoot());

    TRACE(_T("Title of %s is %s\n"), szFileToFind,(LPCTSTR)finder.GetFileTitle());

    TRACE(_T("Path of %s is %s\n"), szFileToFind, (LPCTSTR)finder.GetFilePath());

    TRACE(_T("URL of %s is %s\n"), szFileToFind, (LPCTSTR)finder.GetFileURL());

    TRACE(_T("Name of %s is %s\n"), szFileToFind, (LPCTSTR)finder.GetFileName());

    finder.Close();
}
else
{
    TRACE(_T("You have no %s file.\n"), szFileToFind);
}

答案 1 :(得分:0)

建立gwangsoo所说的内容,我将CFileFind与GetFilePath和GetFileName一起使用。

但是,我从How to get list of files in a directory programmatically的答案中汲取了很多。我的差异包括实现CFileFind(使其相当重复和低效,但它有效),以便在找到我想要的文件类型的子字符串时可以使用CString而不是tchar。

CFileFind finder;
CString find;
find = ".txt";
finder.FindFile(stored_path+"\\*");
WIN32_FIND_DATA search_data;
memset(&search_data, 0, sizeof(WIN32_FIND_DATA));
HANDLE handle = FindFirstFile(stored_path+"\\*", &search_data);
while(handle != INVALID_HANDLE_VALUE)
{
   finder.FindNextFile();
   if (finder.GetFileName().Find (find) != -1)
   {
      save_count++;
      if (save_count == 1)
      {
         save_name = finder.GetFileName();
         save_path = finder.GetFilePath();
      }
   }
   if(FindNextFile(handle, &search_data) == False )
      break;
}

我还包括第四行     finder.FindFile(stored_pa​​th +" \ *&#34); 作为进入我当前保存的文件夹的一种方式(作为stored_pa​​th)。

感谢帮助人员!