2 回答

TA貢獻1796條經驗 獲得超10個贊
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個。
即如果想使用CFileFind的成員函數,必須先初始化一次。
第一次用FindNextFile();找到是第一個文件,不是第二個。
總是這樣一個過程:1:Find 2:Next 3:調用
由路徑找到文件信息
void CMPEG2EncodeDlg::AddFileLink(CString filepath)
{
SHFILEINFO fileinfo;//文件信息結構,用來獲取文件的圖標
CFileFind filefd;//文件查找類
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);//取得文件圖標
m_listShowPicture.InsertItem(0,"",i);
m_listShowPicture.SetItemText(0,0,filefd.GetFileName());//3
m_listShowPicture.SetItemText(0,1,filefd.GetFilePath());
}
}

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