这两天,我学习了一下CFileFind类,关于其使用,如下:
CFileFind
Constructs a CFileFind object.
Attributes
GetCreationTime
Gets the time the file was created.
GetFileName
Gets the name, including the extension, of the found file
GetFilePath
Gets the whole path of the found file.
GetFileTitle
Gets the title of the found file. The title does not include the extension.
GetFileURL
Gets the URL, including the file path, of the found file.
GetLastAccessTime
Gets the time that the file was last accessed.
GetLastWriteTime
Gets the time the file was last changed and saved.
GetLength
Gets the length of the found file, in bytes.
GetRoot
Gets the root directory of the found file.
IsArchived
Determines if the found file is archived.
IsCompressed
Determines if the found file is compressed.
IsDirectory
Determines if the found file is a directory.
IsDots
Determines if the name of the found file has the name "." or "..", indicating that is actually a directory.
IsHidden
Determines if the found file is hidden.
IsNormal
Determines if the found file is normal (in other words, has no other attributes).
IsReadOnly
Determines if the found file is read-only.
IsSystem
Determines if the found file is a system file.
IsTemporary
Determines if the found file is temporary.
MatchesMask
Indicates the desired file attributes of the file to be found.
Operations
Close
Closes the search request.
CloseContext
Closes the file specified by the current search handle.
FindFile
Searches a directory for a specified file name.
FindNextFile
Continues a file search from a previous call to FindFile.
为了巩固学习,特编写了两个小的程序,第一个主要实现了通过知道的盘符,遍历该盘符下所有目录,并以视图的形式通过CTreeCtrl控件表现出来,详细代码如下:
void CCFileFind_Tree_DemoDlg::OnBnClickedButton1()
{
// TODO: 在此添加控件通知处理程序代码
CString FileName1,FileName2;
m_EdtFile.GetWindowTextW((CString &)FileName1);
if(FileName1!=csTempText)
{
csTempText=FileName1;
m_Tree.DeleteAllItems();
if(true==m_RaDisk.GetCheck())
{
nStyle=0;
FileName2.Format(L"%s://*.*",FileName1);
}
else
{
nStyle=1;
FileName2.Format(L"%s//*.*",FileName1);
MessageBox(L"无法查找遍历文件夹");
}
m_Root=m_Tree.InsertItem(FileName1,nStyle,nStyle);
FileTraverse(FileName2,m_Root);
}
else
MessageBox(L"只能输入一个遍历对象!");
}
void CCFileFind_Tree_DemoDlg::OnBnClickedRadio1()
{
// TODO: 在此添加控件通知处理程序代码
m_RaDisk.SetCheck(true);
}
void CCFileFind_Tree_DemoDlg::OnBnClickedRadio2()
{
// TODO: 在此添加控件通知处理程序代码
m_RaDisk.SetCheck(false);
}
bool CCFileFind_Tree_DemoDlg::FileTraverse(CString FileName,HTREEITEM m_ParItem)
{
CFileFind finder;
bool IsFinded=finder.FindFile(FileName);
while(IsFinded)
{
IsFinded=(BOOL)finder.FindNextFileW();
if(!IsFinded)
continue;
if(finder.IsDots())
continue;
if(finder.IsDirectory())
{
CString FileName3,FileName4;
FileName3=finder.GetFilePath();
FileName4=finder.GetFileName();
//添加分支结点
nStyle=1;
m_CurItem=m_Tree.InsertItem(FileName4,nStyle,nStyle,m_ParItem);
FileName3+="//*.*";
bool iReturn=FileTraverse(FileName3,m_CurItem);
if(true==iReturn)
{
finder.Close();
}
}
else
{
CString FileName3,FileName4;
FileName3=finder.GetFilePath();
FileName4=finder.GetFileName();
//添加叶子结点
nStyle=2;
m_CurItem=m_Tree.InsertItem(FileName4,nStyle,nStyle,m_ParItem);
}
}
finder.Close();
return false;
}
程序运行图如下:
第二个程序主要是通过盘符和文件名,查找制定文件,并将文件路径显示出来,详细代码如下:
void CCFileFindTestDlg::OnBnClickedSearch()
{
// TODO: 在此添加控件通知处理程序代码
CString csDisk,csFileName,csDirName;
m_EdtDisk.GetWindowText((CString &)csDisk);
m_EdtFileName.GetWindowText((CString &)csFileName);
csDirName.Format(L"%s://*.*",csDisk,csFileName);
SearchFile(csDirName,csFileName);
m_EdtPath.SetWindowText(csReturn);
}
bool SearchFile(CString csDirName,CString csFileName)
{
CFileFind finder;
bool IsFinded=finder.FindFile(csDirName);
while(IsFinded)
{
IsFinded=(BOOL)finder.FindNextFile();
if(!IsFinded)
{
continue;
}
if(finder.IsDots())
continue;
if(finder.IsDirectory())
{
CString csNewDirName;
csNewDirName=finder.GetFilePath();
csNewDirName+=L"//*.*";
int iReturn=SearchFile(csNewDirName,csFileName);
if(iReturn==true)
{
finder.Close();
return true;
}
}
else
{
CString csCurName;
csCurName=finder.GetFileName();
// MessageBox(NULL,csCurName,NULL,0);
if(/*finder.GetFileName()*/csCurName==csFileName)
{
CString csNewDirName;
csNewDirName=finder.GetFilePath();
csReturn=csNewDirName;
finder.Close();
return true;
}
}
}
finder.Close();
return false;
}
程序运行图: