2017-07-18 72 views
0

我有一個方法,打開一個保存的設置文件(當單擊文件 - >打開時),當我打開另一組文件時,我試圖自動打開文件。MFC,找到特定的文件類型

所以要做到這一點,我想統計一個文件夾中有多少特定類型的文件,以確保只有1個。 文件夾中還會有其他文件類型,所以我需要一種方法來解決它們。

我已經有文件夾的路徑,但有沒有簡單的方法來搜索文件類型?也許甚至得到他們的名字?

我對MFC非常陌生,並且儘可能老,在特定領域我找不到太多幫助。 謝謝!

編輯(澄清) - 例如讓我說我有一個文件夾包含3個單詞文檔和一個文本文件。我希望它能夠搜索文件夾,並說有3個文件與.docx或1文件是.txt(取決於我告訴它搜索)。如果我可以保存找到的文件的名稱,那將會很好。

+0

你的問題不清楚。您是否在尋找[this](https://msdn.microsoft.com/en-us/library/windows/desktop/aa365200(v = vs.85).aspx)? –

+0

不幸的是,我不需要列出它們,只需搜索它們。我有一個包含3個單詞文檔和一個文本文件的文件夾。我希望它能夠搜索文件夾,並說有3個文件是.docx或1文件是.txt。如果我可以保存找到的文件的名稱,那將會很好。 – ReddestHorse

+0

您認爲列出文件和搜索文件有什麼區別? – interjay

回答

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); 
} 
0

關於gwangsoo說過的話,我使用了帶有GetFilePath和GetFileName的CFileFind。

但是,我從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 + 「\ *」); 作爲一種進入我當前保存的文件夾(作爲stored_pa​​th)的方式。

感謝您的幫助!