---- 在SDI項(xiàng)目?jī)?nèi),通過(guò)使用CFileDialog和CFileFind類,不僅可以實(shí)現(xiàn)Windows桌面上
現(xiàn)有的查找功能,而且可以靈活擴(kuò)展查找條件.例如,下面的程序?qū)⒃赩isualC++6.0的
Output窗口內(nèi)逐行輸出c:\windows下所有長(zhǎng)度小于500字節(jié)的只讀文件:
#include < direct.h > /*含有
_getcwd,_chdir原型*/
void f0(){
char x[256],y[256];
CFileDialog fd(TRUE);
/*用TRUE值構(gòu)造"File Open"對(duì)話框*/
_getcwd(x,256); /*
當(dāng)前工作目錄存入x數(shù)組*/
if (fd.DoModal()==IDOK){
/*在CfileDialog對(duì)話過(guò)程中,
先選定c:\windows目錄,
再選定其下一普通文件,如Notepad.exe,
或輸入一不存在的文件,如f0.non*/
_getcwd(y,256);
/*當(dāng)前工作目錄c:\windows存入y數(shù)組*/
f1(y); /*用y內(nèi)容調(diào)用f1函數(shù)*/
}
_chdir(x); /*當(dāng)前工作目錄置回x內(nèi)容*/
}
void f1(CString x){
BOOL b;CFileFind f;
/*考慮到遞歸,只能使用局部變量*/
_chdir(x); b=f.FindFile("*.*");
/*當(dāng)前工作目錄置成實(shí)參x,
然后查其下所有文件*/
while(b){
b=f.FindNextFile();
if (f.IsDirectory()){
/*當(dāng)前文件是目錄*/
if (!f.IsDots())
{ f1(f.GetFilePath());
/*目錄文件非"."和"..",
則用全路徑調(diào)用自身*/
}
}
else
if (f.IsReadOnly()&&f.GetLength
()< 500){
afxDump< < "\n";
afxDump< < f.GetFilePath();
/*輸出長(zhǎng)度小于500字節(jié)的只讀文件的文件*/
}
}
}
---- 待程序正常結(jié)束后,Output窗口將顯示執(zhí)行結(jié)果.另外,經(jīng)用CmemoryState類檢查,
已證明此段程序未導(dǎo)致內(nèi)存泄漏.
現(xiàn)有的查找功能,而且可以靈活擴(kuò)展查找條件.例如,下面的程序?qū)⒃赩isualC++6.0的
Output窗口內(nèi)逐行輸出c:\windows下所有長(zhǎng)度小于500字節(jié)的只讀文件:
#include < direct.h > /*含有
_getcwd,_chdir原型*/
void f0(){
char x[256],y[256];
CFileDialog fd(TRUE);
/*用TRUE值構(gòu)造"File Open"對(duì)話框*/
_getcwd(x,256); /*
當(dāng)前工作目錄存入x數(shù)組*/
if (fd.DoModal()==IDOK){
/*在CfileDialog對(duì)話過(guò)程中,
先選定c:\windows目錄,
再選定其下一普通文件,如Notepad.exe,
或輸入一不存在的文件,如f0.non*/
_getcwd(y,256);
/*當(dāng)前工作目錄c:\windows存入y數(shù)組*/
f1(y); /*用y內(nèi)容調(diào)用f1函數(shù)*/
}
_chdir(x); /*當(dāng)前工作目錄置回x內(nèi)容*/
}
void f1(CString x){
BOOL b;CFileFind f;
/*考慮到遞歸,只能使用局部變量*/
_chdir(x); b=f.FindFile("*.*");
/*當(dāng)前工作目錄置成實(shí)參x,
然后查其下所有文件*/
while(b){
b=f.FindNextFile();
if (f.IsDirectory()){
/*當(dāng)前文件是目錄*/
if (!f.IsDots())
{ f1(f.GetFilePath());
/*目錄文件非"."和"..",
則用全路徑調(diào)用自身*/
}
}
else
if (f.IsReadOnly()&&f.GetLength
()< 500){
afxDump< < "\n";
afxDump< < f.GetFilePath();
/*輸出長(zhǎng)度小于500字節(jié)的只讀文件的文件*/
}
}
}
---- 待程序正常結(jié)束后,Output窗口將顯示執(zhí)行結(jié)果.另外,經(jīng)用CmemoryState類檢查,
已證明此段程序未導(dǎo)致內(nèi)存泄漏.