WinCE应用程序开发---创建文件或文件夹
1. 功能:在WinCE平板电脑的ResidentFlash盘中指定任意的文件路径及文件名,实现检查文件是否存在,如果存在则返回TRUE,否则创建该文件。
2. 实现:
2.1 平台: WinCE6.0 + VS2005
2.2 实现方法:众所周知,创建文件用CreateFile()函数,创建文件夹用CreateDirectory()函数。但是如果指定的文件路径中有些文件夹本身就不存在,该如何处理,这篇随便给出了具体的实现过程。
思路:先判断文件是否存在,如果存在,则直接返回;如果不存在,就依次判断路径中的各级文件夹是否存在,不存在则创建文件夹,直到最后创建文件。
2.2.1 主函数
BOOL CheckFileExistOrNot(CString strFilePath)
{
DWORD FileAttributeValue = ::GetFileAttributes(strFilePath);
if(FileAttributeValue == 0xFFFFFFFF)
{
::AfxMessageBox(TEXT("数据文件不存在"));
// 创建文件前,先检查各级文件夹是否存在,若有某级文件夹不存在,则需先创建各级不存在的文件夹,然后再创建文件
CAtlString strTemp = strFilePath;
int curPos= 0;
curPos = strTemp.ReverseFind('\\');
strTemp = strTemp.Left(curPos+1); // strTemp为去掉文件名的文件夹路径
CString strTemp2;
curPos = strTemp.Find('\\',1);
while(curPos != -1)
{
strTemp2 = strTemp.Left(curPos);
CheckFolderExistOrNot(strTemp2);
curPos = strTemp.Find('\\',curPos+1);
}
// 检查完各级文件夹后,直接根据文件名创建文件
HANDLE h_File = CreateFile(strFilePath,
GENERIC_READ|GENERIC_WRITE,
FILE_SHARE_READ|FILE_SHARE_WRITE,
NULL,
CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,
NULL);
CloseHandle(h_File);
return FALSE;
}
else
{
return TRUE;
}
}
2.2.2 子函数
BOOL CheckFolderExistOrNot(CString strFolderPath)
{
DWORD FileAttributeValue = ::GetFileAttributes(strFolderPath);
if(FileAttributeValue == 0xFFFFFFFF)
{
::AfxMessageBox(TEXT("数据文件夹不存在"));
CreateDirectory(strFolderPath,NULL);
return FALSE;
}
else
{
return TRUE;
}
}
3. 测试用例:
3.1 测试文件夹是否存在
CString strFolderPath = TEXT("\\ResidentFlash\\TestData1");
BOOL m_bExist = CheckFolderExistOrNot(strFolderPath);
如果文件夹不存在,则弹出如下提示:
3.2 测试文件是否存在
CString strFilePath = TEXT("\\ResidentFlash\\TestData\\ABC\\EDF\\1.bin");
BOOL m_bFileExist = CheckFileExistOrNot(strFilePath);
4. 总结
实践出真知,与诸位共勉。