⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cefindfile.cpp

📁 wince下文件查找
💻 CPP
字号:


#include "CeFindFile.h"

CCeFindFile::CCeFindFile()
{
	m_pfiledata = NULL;
	m_pNextdata = NULL;
	m_hFileHandle = INVALID_HANDLE_VALUE;
	ptRootPath = NULL;
}

CCeFindFile::~CCeFindFile()
{
	CloseFind();
}

BOOL CCeFindFile::FindFile(PTCHAR ptFileName)
{
	CloseFind();
	ptRootPath = new TCHAR[MAX_FILEPATH];
	m_pNextdata = new WIN32_FIND_DATA;
	GetRootPath(ptFileName);
	//查找文件
	m_hFileHandle = ::FindFirstFile( ptFileName, m_pNextdata );
	DWORD dwlasterror = GetLastError();
	if ( m_hFileHandle == INVALID_HANDLE_VALUE )
	{//未找到文件
		CloseFind();
		return FALSE;
	}
	
	return TRUE;
}

BOOL CCeFindFile::FindFile(PTCHAR ptFilePath, PTCHAR ptcFileName)
{
	TCHAR tcFullPathName[MAX_FILEPATH] = {0};
	DWORD dwFullPathLen = wcslen(ptFilePath) - 1;

	wcscpy(tcFullPathName, ptFilePath);
	if (_T('\\') != tcFullPathName[dwFullPathLen])
		wcscat(tcFullPathName, _T("\\"));
	
	wcscat(tcFullPathName, ptcFileName);
	
	if (FALSE == FindFile(tcFullPathName))
		return FALSE;

	return TRUE;
}

BOOL CCeFindFile::FindNextFile()
{
	if (m_hFileHandle == NULL)
		return FALSE;
	
	if (m_pfiledata == NULL)
		m_pfiledata = new WIN32_FIND_DATA;
	
	LPWIN32_FIND_DATA pTemp = m_pfiledata;
	m_pfiledata = m_pNextdata;
	m_pNextdata = pTemp;
	
	return ::FindNextFile(m_hFileHandle, m_pNextdata);
}

void CCeFindFile::CloseFind()
{
	DELETE_POINTER(m_pfiledata);
	DELETE_POINTER(m_pNextdata);
	DELETE_POINTER(ptRootPath);
	if( m_hFileHandle != NULL && m_hFileHandle != INVALID_HANDLE_VALUE )
	{
		::FindClose(m_hFileHandle);
		m_hFileHandle = NULL;
	}
}

//查找一个文件夹下的所有文件,并保存到列表中,
//		ptDirectory		:	路径	 _T("\\CortoiFlash")
//		ptSuffixName	:	后缀名(_T(".mp3")),NULL表示查找所有
BOOL CCeFindFile::FindFileList(PTCHAR ptDirectory, PTCHAR ptSuffixName, DWORD& dwTotalFiles)
{
	TCHAR FileNameForFind[MAX_FILEPATH] = {0}; 
	DWORD i = 0;
	m_pFileList = new FILE_LIST[512];
	wcscpy(FileNameForFind, ptDirectory);
	if (NULL == ptSuffixName)
	{
		if (_T('\\') == ptDirectory[wcslen(ptDirectory) - 1])
		{
			wcscat(FileNameForFind, _T("*.*"));
		}
		else
		{
			wcscat(FileNameForFind, _T("\\*.*"));
		}
	}
	else
	{
		FindDirectoryFolders(ptDirectory, m_pFileList, i);
		wcscat(FileNameForFind, _T("\\*"));
		wcscat(FileNameForFind, ptSuffixName);
	}
	BOOL bRetValue = FALSE;
	bRetValue = FindFile(FileNameForFind);
	if (FALSE == bRetValue)
		return FALSE;
	while (TRUE)
	{
		bRetValue = FindNextFile();
		//////////////////////////////////////////////////////////////////////////
		//添加受保护文件名
		//////////////////////////////////////////////////////////////////////////
		m_pFileList[i].dwFileType = m_pfiledata->dwFileAttributes;
		wcscpy(m_pFileList[i].FileName, m_pfiledata->cFileName);
		i++;
		if (i > 512)
			break;
		if (FALSE == bRetValue)
		{
			if (ERROR_NO_MORE_FILES == GetLastError())
				break;
			else
				return FALSE;
		}
	}

	dwTotalFiles = i;
	return TRUE;
}

BOOL CCeFindFile::FindDirectoryFolders(PTCHAR ptcDirectory, PFILE_LIST ForSave, DWORD& dwTotalFolder)
{
	TCHAR FileNameForFind[MAX_FILEPATH] = {0}; 
	DWORD i = 0;
	wcscpy(FileNameForFind, ptcDirectory);
	wcscat(FileNameForFind, _T("\\*.*"));
	BOOL bRetValue = FALSE;
	bRetValue = FindFile(FileNameForFind);
	if (FALSE == bRetValue)
		return FALSE;
	while (TRUE)
	{
		bRetValue = FindNextFile();
		if(IsDirectory())
		{
			m_pFileList[i].dwFileType = m_pfiledata->dwFileAttributes;
			wcscpy(m_pFileList[i].FileName, m_pfiledata->cFileName);
			i++;
		}
		if (i > 512)
			break;
		if (FALSE == bRetValue)
		{
			if (ERROR_NO_MORE_FILES == GetLastError())
				break;
			else
				return FALSE;
		}
	}
	dwTotalFolder = i;
	return TRUE;	
}

BOOL CCeFindFile::GetFileName(PTCHAR ptFileName)
{
	if (m_pfiledata != NULL)
		wcscpy(ptFileName, m_pfiledata->cFileName);
	else
		return FALSE;
	return TRUE;	
}

BOOL CCeFindFile::GetFilePath(PTCHAR ptFilePath)
{
	if (m_pfiledata != NULL)
	{
		wcscpy(ptFilePath, ptRootPath);
		wcscat(ptFilePath, m_pfiledata->cFileName);
	}
	else
	{
		return FALSE;
	}
	return TRUE;
}

BOOL CCeFindFile::AddFilePath(const PTCHAR ptFileName, PTCHAR ptFilePath)
{
	wcscpy(ptFilePath, ptRootPath);
	wcscat(ptFilePath, ptFileName);
	return TRUE;
}

void CCeFindFile::GetRootPath(const PTCHAR ptFileName)
{
	INT i = 0;
	DWORD dwStrLen = wcslen(ptFileName);
	wcscpy(ptRootPath, ptFileName);
	for (i = dwStrLen; i > 0; i--)
	{
		if (ptRootPath[i] == _T('\\'))
		{
			break;
		}
		else
		{
			ptRootPath[i] = 0;
		}
	}
}

BOOL CCeFindFile::IsDirectory()
{
	if (m_pfiledata != NULL)
	{
		if(m_pfiledata -> dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
			return TRUE;
		else
			return FALSE;
	}
	return FALSE;
}

















⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -