added SplitFilename and ReplaceExtName functions at filesystem/Filename.h

This commit is contained in:
2021-12-13 13:40:32 +08:00
parent 021df224d0
commit 6dccc324b6

View File

@@ -210,10 +210,10 @@ namespace hgl
/** /**
* 清除完整文件名中的扩展名 * 清除完整文件名中的扩展名
* @param fullname 完整文件名 * @param fullname 完整文件名
* @param include_dot 是否包括点也清除 * @param clear_dot 是否包括点也清除
*/ */
template<typename T> template<typename T>
inline String<T> TrimFileExtName(const String<T> &fullname,bool include_dot=false) inline String<T> TrimFileExtName(const String<T> &fullname,bool clear_dot=false)
{ {
int end=fullname.FindChar(T('?')); //url的文件名以?为结束 int end=fullname.FindChar(T('?')); //url的文件名以?为结束
@@ -225,7 +225,7 @@ namespace hgl
if(pos==-1) if(pos==-1)
return String<T>(); return String<T>();
return include_dot? fullname.SubString(0,pos): return clear_dot? fullname.SubString(0,pos):
fullname.SubString(0,pos+1); fullname.SubString(0,pos+1);
} }
@@ -296,6 +296,45 @@ namespace hgl
return(String<T>()); return(String<T>());
} }
/**
* 截取完整路径中的路径名和文件名
* @param pathname 拆分后的路径名
* @param filename 拆分后的文件名
* @param fullname 拆分前的完整路径文件名
*/
template<typename T>
inline bool SplitFilename(String<T> &pathname,String<T> &filename,const String<T> &fullname)
{
if(fullname.Length()<=1)
return false;
const T spear_char[] = { '/','\\' };
const int pos=fullname.FindRightChars(spear_char);
if(pos==-1)
return(false);
pathname.Strcpy(fullname,pos);
filename.Strcpy(fullname.c_str()+pos+1);
return(true);
}
template<typename T>
inline String<T> ReplaceExtName(const String<T> &old_name,const String<T> &new_extname,const T split_char='.')
{
if(old_name.Length()<=1)
return(String<T>::charOf(split_char)+new_extname);
const int pos=old_name.FindRightChar(split_char);
if(pos!=-1)
return old_name.SubString(0,pos)+new_extname;
else
return old_name+String<T>::charOf(split_char)+new_extname;
}
inline UTF8String MergeFilename(const UTF8String &pathname,const UTF8String &filename) ///<组合路径名与文件名 inline UTF8String MergeFilename(const UTF8String &pathname,const UTF8String &filename) ///<组合路径名与文件名
{return MergeFilename<u8char>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_U8STR);} {return MergeFilename<u8char>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_U8STR);}