2 回答

TA貢獻(xiàn)1796條經(jīng)驗(yàn) 獲得超10個(gè)贊
CFileFind finder;
BOOL bWorking = finder.FindFile("*.*");//1
while (bWorking)
{
bWorking = finder.FindNextFile();//2
int i = m_listShowPicture.GetItemCount();//3
m_listShowPicture.InsertItem(i,"");
m_listShowPicture.SetItemText(i,0,finder.GetFileName());
}
上面程序完成文件遍歷。
finder.FindNextFile();使用n次,找到的文件就是第n個(gè)。
即如果想使用CFileFind的成員函數(shù),必須先初始化一次。
第一次用FindNextFile();找到是第一個(gè)文件,不是第二個(gè)。
總是這樣一個(gè)過(guò)程:1:Find 2:Next 3:調(diào)用
由路徑找到文件信息
void CMPEG2EncodeDlg::AddFileLink(CString filepath)
{
SHFILEINFO fileinfo;//文件信息結(jié)構(gòu),用來(lái)獲取文件的圖標(biāo)
CFileFind filefd;//文件查找類(lèi)
BOOL bContinue = filefd.FindFile(filepath); //1
if(bContinue)
{
filefd.FindNextFile();//2
SHGetFileInfo( filefd.GetFilePath(),
0,
&fileinfo,sizeof(fileinfo),
SHGFI_ICON);
int i = m_imagelist.Add(fileinfo.hIcon);//取得文件圖標(biāo)
m_listShowPicture.InsertItem(0,"",i);
m_listShowPicture.SetItemText(0,0,filefd.GetFileName());//3
m_listShowPicture.SetItemText(0,1,filefd.GetFilePath());
}
}

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
FindNextFile的返回值比較麻煩,他是剛剛好遍歷到最后一個(gè)文件的時(shí)候,給你返回false,也就意味著最后一個(gè)文件還沒(méi)處理就退出while了。
所以得寫(xiě)成這樣:
BOOL bRes = ff.FindFile(.....);
while(bRes)
{
bRes = ff.FindNextFile();// 遍歷到最后一個(gè)文件的時(shí)候,bRes變成false。下面先處理了這個(gè)文件,之后才退出循環(huán)。
if (!ff.IsDirectory())
{...}
}
- 2 回答
- 0 關(guān)注
- 255 瀏覽
添加回答
舉報(bào)