導航:首頁 > 文件教程 > mfc獲取目錄下所有文件

mfc獲取目錄下所有文件

發布時間:2024-12-18 03:08:14

㈠ MFC中獲取文件名及路徑實現方法——DirDialog類中的BrowseCtrlCallback注釋翻譯

int__stdcallCDirDialog::BrowseCtrlCallback(HWNDhwnd,UINTuMsg,LPARAMlParam,LPARAMlpData)
{
//bInfo.lParam=(LPARAM)this;這行代碼將CDirDialog對象通過lpData傳入到回調函數BrowseCtrlCallback
CDirDialog*pDirDialogObj=(CDirDialog*)lpData;
//瀏覽目錄的對話框已初始化完成後會回調BrowseCtrlCallback,uMsg等於BFFM_INITIALIZED
if(uMsg==BFFM_INITIALIZED)
{
//如果指定了默認目錄,給hwnd(瀏覽目錄對話框)發送BFFM_SETSELECTION消息,用於自動選中該默認目錄
if(!pDirDialogObj->m_strSelDir.IsEmpty())
::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)(LPCTSTR)(pDirDialogObj->m_strSelDir));
//如果CDirDialog的m_strWindowTitle不是空字元串,那麼將瀏覽目錄對話框的窗口標題設置為m_strWindowTitle
if(!pDirDialogObj->m_strWindowTitle.IsEmpty())
::SetWindowText(hwnd,(LPCTSTR)pDirDialogObj->m_strWindowTitle);
}
//瀏覽目錄的對話框內用戶選擇的目錄變化時,回調BrowseCtrlCallback,uMsg等於BFFM_SELCHANGED
elseif(uMsg==BFFM_SELCHANGED)
{
//BFFM_SELCHANGED消息中,lpData指向新選擇的目錄的PIDL
LPITEMIDLISTpidl=(LPITEMIDLIST)lParam;
charselection[MAX_PATH];
//調用SHGetPathFromIDList從PIDL轉換為文件系統路徑字元串
if(!::SHGetPathFromIDList(pidl,selection))
selection[0]='';
CStringcsStatusText;
//調用SelChanged函數,由CDirDialog或其派生類重載的SelChanged函數來決定是否允許選擇該目錄
BOOLbOk=pDirDialogObj->SelChanged(selection,csStatusText);
if(pDirDialogObj->m_bStatus)
//修改瀏覽目錄的對話框的狀態欄內容為新選擇的目錄路徑
::SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)(LPCSTR)csStatusText);
//如果SelChanged返回TRUE,表示允許選擇該目錄,於是啟用"確定"按鈕,否則禁用。
::SendMessage(hwnd,BFFM_ENABLEOK,0,bOk);
}
return0;
}

㈡ 怎樣用mfc找出文件夾路徑,並讀取文件夾內所有圖片

CFileFind find;
CString Path = lpszPath;
CString lpsz = Path +L"\\";
Path = Path +L"\\*.*";
BOOL IsFind = find.FindFile(Path);
while(IsFind )
{
IsFind=find.FindNextFile();
//如果是"."則不掃描
if(find.IsDots())
continue;
//是目錄,繼續掃描此目錄
else if(find.IsDirectory())
{
CString strPath = lpszPath;
strPath = strPath + L"\\" + find.GetFileName();
ScanDiskFile(strPath);
}
//文件
else
{
//獲得文件的路徑
m_strFile = find.GetFileName();
CString extend = m_strFile.Right(m_strFile.GetLength() - m_strFile.ReverseFind('.') - 1);//取得擴展名
if (extend == m_ext_one | extend == m_ext_two)//m_ext_now為你要查找的文件擴展名
{
m_strArray.Add(lpsz + m_strFile);
}
}
}
find.Close();
m_ext_one、m_ext_two用於指定需要搜索的文件後綴名

㈢ MFC獲取指定文件夾文件目錄

在MFC中,使用CFileFind類,可以枚舉一個目錄下的所有文件和子回目錄。

示例:

voidListFolder(constCString&sPath)
{
CFileFindff;
BOOLbFound=ff.FindFile(sPath+"\*.*");
while(bFound)
{
bFound=ff.FindNextFile();
if(ff.IsDirectory())//是目錄
{
if(!ff.IsDots())//不是本答級目錄或父目錄(.和..)
ListFolder(ff.GetFilePath());//遞歸子目錄
}
else
{
AfxMessageBox("文件:"+ff.GetFilePath());
}
}
ff.Close();
}

㈣ MFC怎麼查找當前目錄以及子目錄下的*_DS.TXT文件

在應用程序的開發過程中,會遇到如何查找某一文件以確定此文件路徑的問題。利用CFileFind類可以比較方便地在當前目錄下進行文件查找,但卻不能對其子目錄中的文件進行搜尋。而實際應用中往往需要對某一整個目錄樹,甚至是整個C盤或D盤驅動器進行文件搜尋。通過實踐,我們在Visual C++ 6.0中編程實現了如何遍歷任意目錄樹,以查找某一特定的文件。
在下面的具體陳述中可以看到,在確定要查找的文件名和要進行搜索的目錄的名稱後,將調用函數Search_Directory進行文件的查找。首先依次查找當前目錄下的每一個實體(文件或是子目錄),如果是某一子目錄,則進入該子目錄並遞歸調用函數Search_Dirctory進行查找,查找完畢之後, 再返回上一級目錄;如果不是子目錄而是某一文件,則判斷其是否就是我們要查找的文件,如果是則輸出其完整的文件路徑。這樣,通過Search_Directory函數的反復遞歸調用,就可以實現對整個目錄,包括子目錄的遍歷搜索。下面將舉例詳細講述如何在VC++中編程實現在整個目錄樹中的文件查找。
1. 在Visual C++ 6.0中用默認方式創建了一基於對話框的應用程序Search。在主窗口對話框上放置一命令按鈕,其Caption為「Search File」,ID為ID_BUTTON_SEARCH。單擊此按鈕將完成文件的查找工作。
2. 利用ClassWizard為「Search File」按鈕的BN_CLICKED 事件添加處理函數OnButtonSearch,代碼如下:

#include 〈direct.h〉
#include 〈io.h〉
void CSearchDlg::OnButtonSearch()
{
// TODO: Add your control notification handler code here

char szFilename[80];
// 字元串 szFilename 表示要查找的文件名

strcpy(szFilename,"Mytext.txt");

_chdir("d:\\"); // 進入要查找的路徑(也可為某一具體的目錄)
// 查找文件, 如果查到則顯示文件的路徑全名
Search_Directory(szFilename);
// 為CSearchDlg類的一成員函數
MessageBox(″查找文件完畢!″);
// 顯示查找完畢的信息
}

3. 在CSearchDlg類中增加成員函數Search_Directory,它將完成具體的文件查找工作,代碼如下:
void CSearchDlg::Search_Directory(char* szFilename)
{
long handle;
struct _finddata_t filestruct;
//表示文件(或目錄)的信息
char path_search[_MAX_PATH];
//表示查找到的路徑結果
// 開始查找工作, 找到當前目錄下的第一個實體(文件或子目錄),
// "*"表示查找任何的文件或子目錄, filestruct為查找結果
handle = _findfirst("*", &filestruct);
// 如果handle為-1, 表示當前目錄為空, 則結束查找而返回
if((handle == -1)) return;
// 檢查找到的第一個實體是否是一個目錄(filestruct.name為其名稱)
if( ::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY )
{
// 如果是目錄, 則進入該目錄並遞歸調用函數Search_Dirctory進行查找,
// 注意: 如果目錄名的首字元為'.'(即為"."或".."), 則不用進行查找
if( filestruct.name[0] != '.' )
{
_chdir(filestruct.name);
Search_Directory(szFilename);
// 查找完畢之後, 返回上一級目錄
_chdir("..");
}
}
else // 如果第一個實體不是目錄, 則檢查是否是要查找的文件
{
// stricmp對兩字元串進行小寫形式的對比, 返回為0表示完全一致
if( !stricmp(filestruct.name, szFilename) )
{
// 先獲得當前工作目錄的全路徑
_getcwd(path_search,_MAX_PATH);
// 再獲得文件的完整的路徑名(包含文件的名稱)
strcat(path_search,"\\");
strcat(path_search,filestruct.name);
MessageBox(path_search); //輸出顯示
}
}
// 繼續對當前目錄中的下一個子目錄或文件進行與上面同樣的查找
while(!(_findnext(handle,&filestruct)))
{
if( ::GetFileAttributes(filestruct.name) & FILE_ATTRIBUTE_DIRECTORY )
{
if(*filestruct.name != '.')
{
_chdir(filestruct.name);
Search_Directory(szFilename);
_chdir("..");
}
}
else
{
if(!stricmp(filestruct.name,szFilename))
{
_getcwd(path_search,_MAX_PATH);
strcat(path_search,"\\");
strcat(path_search,filestruct.name);
MessageBox(path_search);
}
}
}
_findclose(handle);
// 最後結束整個查找工作
}
這樣我們就可以對整個目錄進行遍歷搜索,查找某一特定的文件,並輸出顯示其完整的文件路徑。以上的程序在Visual C++ 6.0中已調試通過。

㈤ MFC中遍歷當前目錄下的文件和文件夾,然後將所有找到的文件夾的名字提取出來

把以下代碼放到Win32控制台運行,親測可用:

#include <windows.h>
#define FILEILTER "*.*" //查找條件,例如查找.exe格式的那麼就用*.exe,當然也可以直接用setup.exe
#include "iostream.h"
#include "stdio.h"

BOOL IsRoot(LPCTSTR lpszPath)
{
TCHAR szRoot[4];
wsprintf(szRoot, "%c:\\", lpszPath[0]);
return (lstrcmp(szRoot, lpszPath) == 0);
}

void FindInAll(LPCTSTR lpszPath)
{
TCHAR szFind[MAX_PATH];
lstrcpy(szFind, lpszPath);
if (!IsRoot(szFind))
lstrcat(szFind, "\\");
lstrcat(szFind, FILEILTER); // 找所有文件
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szFind, &wfd);
if (hFind == INVALID_HANDLE_VALUE) // 如果沒有找到或查找失敗
return;

do
{
if (wfd.cFileName[0] == '.')
continue; // 過濾這兩個目錄
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
else
{
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
FindInAll(szFile); // 如果找到的是目錄,則進入此目錄進行遞歸
}
}
else
{
TCHAR szFile[MAX_PATH];
if (IsRoot(lpszPath))
{
wsprintf(szFile, "%s%s", lpszPath, wfd.cFileName);
}
else
{
wsprintf(szFile, "%s\\%s", lpszPath, wfd.cFileName);
printf("%s\n",szFile);
}
// 對文件進行操作
}
} while (FindNextFile(hFind, &wfd));
FindClose(hFind); // 關閉查找句柄

}
int main(int argc, char* argv[])
{
FindInAll("E:"); //這里設置目錄為E:,請根據需要更改
return 0;
}

閱讀全文

與mfc獲取目錄下所有文件相關的資料

熱點內容
php編程語言在哪裡 瀏覽:302
矢量文件有哪些格式 瀏覽:790
文書檔案長期保存的文件有哪些 瀏覽:945
如何把pdf文字復制粘貼到word文檔 瀏覽:507
勤哲價格qinzheapp 瀏覽:709
騰訊小說下載的文件在哪裡 瀏覽:106
js顯示隱藏控制項 瀏覽:119
共享上的文件內容誤刪如何找回 瀏覽:600
雙十一網路營銷分析 瀏覽:634
win10的areo怎麼關 瀏覽:40
阿城區如何辦理電信網路 瀏覽:622
中國移動流量代碼 瀏覽:364
廠里編程叫什麼 瀏覽:96
win10我的世界主題包 瀏覽:34
哪個城市需要編程的企業多 瀏覽:758
linuxfprintf 瀏覽:58
如何把自己的手機在轉轉app上賣掉 瀏覽:641
醫療系統編程學什麼專業 瀏覽:634
北京網路seo優化什麼價格 瀏覽:776
win7文件夾聲音 瀏覽:178

友情鏈接