📄 utilclass.cpp
字号:
// UtilClass.cpp: implementation of the CUtilClass class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "UtilClass.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CUtilClass::CUtilClass()
{
}
CUtilClass::~CUtilClass()
{
}
/////////////////////////////////////////////////////////////////////////
//函数名称:GetRelativePath
//函数功能:--------------------得到字符串argOriginalPath中存放的全路径相对于argReferPath中存放的路径的相对路径-----------------
//入口参数:string argReferPath------------------------参照路径(含文件名)
// string argOriginalPath---------------------需要得到相对路径的路径(含文件名)
//出口参数: string& argRetPath--------------------得到的相对路径结果
//返回值: UTIL_STATUS----------标识操作状态,UTIL_OK表示操作成功
//开发人员:杨军
//开发日期:2004-5-25
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
CUtilClass::UTIL_STATUS CUtilClass::GetRelativePath(string argReferPath, string argOriginalPath, string& argRetPath)
{
//------------------变量定义部分 begins------------------------------
CStringArray strReferPathArray;
CStringArray strOriginalPathArray;
CString strOriginalDrive;
CString strReferDrive;
CString strOriginalPath;
CString strReferPath;
CString strOriginalFileName;
CString strReferFileName;
CString strOriginalExt;
CString strReferExt;
int iSize = 0;
int i = 0;
int j = 0;
//------------------变量定义部分 ends--------------------------------
argRetPath.empty();
//分解源路径
_tsplitpath(argOriginalPath.c_str(), strOriginalDrive.GetBuffer(MAX_PATH), strOriginalPath.GetBuffer(MAX_PATH), strOriginalFileName.GetBuffer(MAX_PATH), strOriginalExt.GetBuffer(MAX_PATH));
strOriginalDrive.ReleaseBuffer();
strOriginalPath.ReleaseBuffer();
strOriginalFileName.ReleaseBuffer();
strOriginalExt.ReleaseBuffer();
//分析相对路径
_tsplitpath(argReferPath.c_str(), strReferDrive.GetBuffer(MAX_PATH), strReferPath.GetBuffer(MAX_PATH), strReferFileName.GetBuffer(MAX_PATH), strReferExt.GetBuffer(MAX_PATH));
strReferDrive.ReleaseBuffer();
strReferPath.ReleaseBuffer();
strReferFileName.ReleaseBuffer();
strReferExt.ReleaseBuffer();
//去除分解出的字符串数据左右两端的空格
strOriginalDrive.TrimLeft();
strOriginalDrive.TrimRight();
strOriginalPath.TrimLeft();
strOriginalPath.TrimRight();
if (strOriginalPath.IsEmpty() || strReferPath.IsEmpty())
{
return UTIL_FAILED;
}
if ('\\' == strOriginalPath[0])
{
strOriginalPath.Delete(0, 1);
}
strOriginalFileName.TrimLeft();
strOriginalFileName.TrimRight();
strOriginalExt.TrimLeft();
strOriginalExt.TrimRight();
strReferDrive.TrimLeft();
strReferDrive.TrimRight();
strReferPath.TrimLeft();
strReferPath.TrimRight();
if ('\\' == strReferPath[0])
{
strReferPath.Delete(0, 1);
}
strReferFileName.TrimLeft();
strReferFileName.TrimRight();
strReferExt.TrimLeft();
strReferExt.TrimRight();
//如果两个路径所处的分区不同,则不再计算其相对路径,直接使用绝对路径
if (strOriginalDrive.Compare(strReferDrive))
{
argRetPath = argOriginalPath;
return UTIL_OK;
}
//如果两个路径所处的分区相同,则开始计算源路径相对于目标路径的相对路径
//unfinished!
//int iRet = strOriginalPath.Replace(_T('\\'), _T('/'));
//iRet = strReferPath.Replace(_T('\\'), _T('/'));
if (UTIL_OK != SplitStringBySeparator(strOriginalPath, _T('\\'), strOriginalPathArray))
{
return UTIL_FAILED;
}
if (UTIL_OK != SplitStringBySeparator(strReferPath, _T('\\'), strReferPathArray))
{
return UTIL_FAILED;
}
iSize = min(strReferPathArray.GetSize(), strOriginalPathArray.GetSize());
for (i = 0; i < iSize; i++)
{
//比较过程中发现有不相同的路径的话
if (strReferPathArray[i].Compare(strOriginalPathArray[i]))
{
break;
}
}
//如果参考路径中所包含的子路径数 < 源路径中所包含的子路径数
if (strReferPathArray.GetSize() < strOriginalPathArray.GetSize())
{
j = i;
for (; i < iSize; i++)
{
argRetPath = argRetPath + _T("..\\");
}
iSize = strOriginalPathArray.GetSize();
for (i = j; i < iSize; i++)
{
argRetPath = argRetPath + (LPCTSTR)strOriginalPathArray[i] + _T("\\");
}
}
//如果参考路径中所包含的子路径数 = 源路径中所包含的子路径数
else if (strReferPathArray.GetSize() == strOriginalPathArray.GetSize())
{
if (i == iSize)
{
argRetPath = _T(".\\");
}
else
{
j = i;
for (; i < iSize; i++)
{
argRetPath = argRetPath + _T("..\\");
}
for (i = j; i < iSize; i++)
{
argRetPath = argRetPath + (LPCTSTR)strOriginalPathArray[i] + _T("\\");
}
}
}
//如果参考路径中所包含的子路径数 > 源路径中所包含的子路径数
else
{
j = i;
iSize = strReferPathArray.GetSize();
for (; i < iSize; i++)
{
argRetPath = argRetPath + _T("..\\");
}
iSize = strOriginalPathArray.GetSize();
for (i = j; i < iSize; i++)
{
argRetPath = argRetPath + (LPCTSTR)strOriginalPathArray[i] + _T("\\");
}
}
argRetPath = argRetPath + (LPCTSTR)strOriginalFileName + (LPCTSTR)strOriginalExt;
return UTIL_OK;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:SplitStringBySeparator
//函数功能:--------------------以argSeparator为分隔符,分解argSrc将分解后的结果放入argResult------------------------------------
//入口参数:CString argSrc--------------------待分解的字符串
// TCHAR argSeparator----------------分隔符
//出口参数: CStringArray& argResult--------------存放分解后的结果
//返回值:无
//开发人员:杨军
//开发日期:2004-5-25
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
CUtilClass::UTIL_STATUS CUtilClass::SplitStringBySeparator(CString argSrc, TCHAR argSeparator, CStringArray& argResult)
{
//------------------变量定义部分 begins------------------------------
CString strTemp(_T(""));
int iIndex = 0;
//------------------变量定义部分 ends--------------------------------
//首先清空结果数组
argResult.RemoveAll();
while (-1 != (iIndex = argSrc.Find(argSeparator, 0)))
{
strTemp = argSrc.Mid(0, iIndex);
argResult.Add(strTemp);
argSrc.Delete(0, iIndex + 1);
}
if (!argSrc.IsEmpty())
{
argResult.Add(argSrc);
}
return UTIL_OK;
}
/////////////////////////////////////////////////////////////////////////
//函数名称:GetPathOfFile
//函数功能:--------------------获得全路径名文件的路径----------------------------------------------------------------------
//入口参数:CString argFullName----------文件的全路径名
//出口参数: CString-------------文件所在路径
//返回值:无
//开发人员:杨军
//开发日期:2004-5-26
//修改人员:
//修改日期:
/////////////////////////////////////////////////////////////////////////
CString CUtilClass::GetPathOfFile(CString argFullName)
{
int iIndex = argFullName.ReverseFind('\\');
if (iIndex >= 0)
{
return argFullName.Mid(0, iIndex);
}
else
{
return argFullName;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -