#include "stdafx.h"
#include <iostream>
#include <cassert>
#include <windows.h>
#include <atlstr.h>
class CFileFinder
{
public:
~CFileFinder()
{
if (m_hFinder != INVALID_HANDLE_VALUE)
{
::FindClose(m_hFinder);
}
}
bool IsFind() const
{
return (m_hFinder != INVALID_HANDLE_VALUE);
}
CString GetFilePath() const
{
assert (m_hFinder != INVALID_HANDLE_VALUE );
return CString(m_str + m_fd.cFileName);
}
CString GetFileTitle() const
{
assert (m_hFinder != INVALID_HANDLE_VALUE);
CString str(m_fd.cFileName);
int i = str.Find(_T('.'));
return str.Left(i);
}
bool IsDirectory() const
{
return (m_fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) == 1;
}
bool Next()
{
assert (m_hFinder != INVALID_HANDLE_VALUE );
if (::FindNextFile(m_hFinder , &m_fd) == 0)
{
if ( GetLastError() != ERROR_NO_MORE_FILES)
m_hFinder = INVALID_HANDLE_VALUE;
return false;
}
return true;
}
protected:
CFileFinder(const CString& strDir, const CString& strFilter) : m_str(strDir), m_hFinder(INVALID_HANDLE_VALUE)
{
CString strFindPath = strDir + strFilter;
m_hFinder = ::FindFirstFile((const TCHAR*)strFindPath , &m_fd );
}
CString m_str;
HANDLE m_hFinder;
WIN32_FIND_DATA m_fd;
};要怎麼使用它呢,假設我們要搜尋某資料夾裡某個的tab檔案:
class TabFileFinder : public CFileFinder
{
public:
TabFileFinder(const CString& strDir) : CFileFinder(strDir , _T("*.tab")) {}
};也可以直接打檔名,例如_T("XD.tab"),運用的時候就是:
TabFileFinder finder(_T("C:\\Test\\"));
while (finder.Next())
{
wprintf(_T("%s\n"), finder.GetFilePath());
}
system("pause");不過,如果有其他工具可使用就更好啦。
0 意見:
張貼留言