我有一个方法可以打开已保存的设置文件(当点击文件 - >打开时),我打算在打开另一组文件时自动打开文件。
为了做到这一点,我想计算一个文件夹中我有多少特定类型的文件,以确保只有1个。 文件夹中还有其他文件类型,所以我需要一种方法来绕过它们。
我已经有了该文件夹的路径,但是有一种简单的方法来搜索文件类型吗?甚至可能得到他们的名字?
我是MFC的新手,虽然它已经老了,但在我想要的具体领域找不到多少帮助。 谢谢!
编辑(澄清) - 例如,假设我有一个包含3个word文档和一个文本文件的文件夹。我希望它能够搜索文件夹,并说有3个文件是.docx或1个文件是.txt(取决于我告诉它搜索的内容)。如果我可以保存其中一个找到的文件的名称,那就太好了。
答案 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_path +" \ *&#34); 作为进入我当前保存的文件夹的一种方式(作为stored_path)。
感谢帮助人员!