📄 utilclass.cpp
字号:
/////////////////////////////////////////////////////////////////////////
//函数名称:RemoveFolder
//函数功能:--------------------删除指定目录------------------------------
//入口参数:const CString& argFolder----------待删除目录
//出口参数:无
//返回值:无
//开发人员:杨军
//开发日期:2004-5-26
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
bool CUtilClass::RemoveFolder(const CString& argFolder)
{
//------------------变量定义部分 begins------------------------------
CString strFileName(_T(""));
WIN32_FIND_DATA findData;
HANDLE hFindFile = INVALID_HANDLE_VALUE;
//------------------变量定义部分 ends--------------------------------
if (argFolder.Right(1).Compare("\\"))
{
strFileName = argFolder + _T("\\*.*");
}
else
{
strFileName = argFolder + _T("*.*");
}
hFindFile = FindFirstFile(strFileName, &findData);
//打开搜索Handle失败
if (INVALID_HANDLE_VALUE == hFindFile)
{
return false;
}
//递归删除目录中所有的文件及子目录
while (INVALID_HANDLE_VALUE != hFindFile)
{
//如果是查找到了系统目录"."或".."则直接跳过,查找下一个文件
if (!strcmp(findData.cFileName, _T(".")) || !strcmp(findData.cFileName, _T("..")))
{
if (!FindNextFile(hFindFile, &findData))
{
if (GetLastError() != ERROR_NO_MORE_FILES)
{
goto RemoveFolder_Failed;
}
else
{
break;
}
}
continue;
}
//如果找到的是一个文件夹,则递归调用自身删除之
//为保证不论文件为任何一方类型均可被删除,将文件类型设为普通文件
SetFileAttributes(findData.cFileName, FILE_ATTRIBUTE_NORMAL);
if (findData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
//删除子文件夹中的内容失败的话
if (!RemoveFolder(CUtilClass::ConcatFolder(argFolder, findData.cFileName)))
{
goto RemoveFolder_Failed;
}
}
else
{
//如果找到的是一个文件,则直接删除
if (!DeleteFile(CUtilClass::ConcatFolder(argFolder, findData.cFileName)))
{
goto RemoveFolder_Failed;
}
}
//查找下一个文件
if (!FindNextFile(hFindFile, &findData))
{
if (GetLastError() != ERROR_NO_MORE_FILES)
{
goto RemoveFolder_Failed;
}
else
{
break;
}
}
}
//删除前需要先关闭查找句柄,否则会出现访问冲突
FindClose(hFindFile);
//删除目录
if (!RemoveDirectory(argFolder))
{
goto RemoveFolder_Failed;
}
return true;
RemoveFolder_Failed:
FindClose(hFindFile);
return false;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:ConcatFolder
//函数功能:--------------------将两个目录连接起来--------------------------------------------------------------
//入口参数:CString argLeft---------------结果目录左边的内容
// CString argRight--------------结果目录右边的内容
//出口参数:无
//返回值:CString---------------------------连接后的结果目录
//开发人员:杨军
//开发日期:2004-5-27
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
CString CUtilClass::ConcatFolder(CString argLeft, CString argRight)
{
if (argLeft.Right(1).Compare(_T("\\")))
{
return argLeft + _T("\\") + argRight;
}
else
{
return argLeft + argRight;
}
}
/////////////////////////////////////////////////////////////////////////
//函数名称:GetRelativePath
//函数功能:--------------------得到字符串argOriginalPath中存放的全路径相对于argReferPath中存放的路径的相对路径-----------------
//入口参数:CString argReferPath------------------------参照路径
// CString argOriginalPath---------------------需要得到相对路径的路径
//出口参数: CString& argRetPath--------------------得到的相对路径结果
//返回值: UTIL_STATUS----------标识操作状态,UTIL_OK表示操作成功
//开发人员:杨军
//开发日期:2004-5-30
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
CUtilClass::UTIL_STATUS CUtilClass::GetRelativePath(CString argReferPath, CString argOriginalPath, CString& argRetPath)
{
string sTemp;
UTIL_STATUS utSTRet = CUtilClass::GetRelativePath(string(argReferPath), string(argOriginalPath), sTemp);
argRetPath = sTemp.c_str();
return utSTRet;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:GetAbsolutePath
//函数功能:------------------得到工程中文件中源文件的绝对路径----------------------
//入口参数:CString argProjectFileName-----------工程文件的文件名(含路径)
// CString argSrcFileName---------------源文件的相对路径文件名
//出口参数:无
//返回值:CString-----------------------------源文件的绝对真理路径文件名
//开发人员:杨军
//开发日期:2004-5-31
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
CString CUtilClass::GetAbsolutePath(CString argProjectFileName, CString argSrcFileName)
{
CString strAbsolutePath;
int iIndex = 0;
iIndex = argProjectFileName.ReverseFind('\\');
if (iIndex < 0)
{
iIndex = argProjectFileName.ReverseFind('/');
if (iIndex < 0)
{
return argSrcFileName;
}
}
strAbsolutePath = argProjectFileName.Mid(0, iIndex);
return strAbsolutePath + _T("\\") + argSrcFileName;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:CheckExeFileVersion
//函数功能:-----------------检查Casl源文件对应的可执行文件的版本---------------
//入口参数:CString argSrcFile-----------源文件的全路径名
//出口参数:无
//返回值:int---------------------- = 0 表示源文件与可执行文件版本相同
// > 0 表示源文件比目录文件版本要新
// < 0 表示源文件比目标文件版本要旧
//开发人员:杨军
//开发日期:2004-5-31
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
int CUtilClass::CheckExeFileVersion(CString argSrcFile)
{
//------------------变量定义部分 begins------------------------------
CString strExeFileName;
CFileStatus exeFileStatus;
CFileStatus srcFileStatus;
CFileFind finder;
int iIndex = argSrcFile.ReverseFind('.');
//------------------变量定义部分 ends--------------------------------
if (iIndex < 0)
{
return 0;
}
//得到源文件所在目录下对应的可执行文件名
strExeFileName = argSrcFile.Mid(0, iIndex);
strExeFileName = strExeFileName + _T(".cse");
//检查源文件是否存在
//如果源文件不存在
if (!finder.FindFile(argSrcFile))
{
return 0;
}
//检查可执行文件是否存在
if (!finder.FindFile(strExeFileName))
{
return 1;
}
//获得源文件,可执行文件的文件状态信息
if (CFile::GetStatus(argSrcFile, srcFileStatus) && CFile::GetStatus(strExeFileName, exeFileStatus))
{
//如果源文件与可执行文件的最后一次修改的时间相同
if (srcFileStatus.m_mtime == exeFileStatus.m_mtime)
{
return 0;
}
//如果源文件的最后一次修改的时间 > 可执行文件的最后一次修改的时间
else if (srcFileStatus.m_mtime > exeFileStatus.m_mtime)
{
return 1;
}
//如果源文件的最后一次修改的时间 < 可执行文件的最后一次修改的时间
else
{
return -1;
}
}
else
{
return 0;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -