MergeFilename改名为Combine

This commit is contained in:
hyzboy 2025-03-27 23:07:32 +08:00
parent 3b3f6e7e12
commit 54f484c442
7 changed files with 149 additions and 21 deletions

View File

@ -60,7 +60,7 @@ namespace hgl
virtual EnumFileConfig *CreateSubConfig(struct EnumFileConfig *up_efc,const FileInfo &fi)
{
const OSString full_sub_folder_name=MergeFilename(up_efc->folder_name,fi.name);
const OSString full_sub_folder_name=Combine(up_efc->folder_name,fi.name);
return(new EnumFileConfig(up_efc,full_sub_folder_name));
}

View File

@ -31,7 +31,7 @@ namespace hgl
*
*/
template<typename T>
inline const String<T> ComboFilename(T **str_list,int *str_len,const int count,const T spear_char=(T)HGL_DIRECTORY_SEPARATOR_RAWCHAR)
inline const String<T> Combine(T **str_list,int *str_len,const int count,const T spear_char=(T)HGL_DIRECTORY_SEPARATOR_RAWCHAR)
{
T *fullname=nullptr;
@ -73,19 +73,143 @@ namespace hgl
return String<T>::newOf(fullname,p-fullname);
}
template<typename T,typename ...ARGS>
inline const String<T> Combine(const T spear_char,const T *str1,ARGS...args)
{
const int count=sizeof...(ARGS);
if(count<=0)
return String<T>(str1);
int total_len=hgl::strlen(str1);
AutoDeleteArray<int> str_len[count+1];
str_len[0]=total_len;
{
int index=1;
for(const T *str:args)
{
str_len[index]=hgl::strlen(str);
total+=str_len[index]+1;
++index;
}
}
T *fullname=new T[total];
T *p=fullname;
hgl_cpy<T>(p,str1,str_len[0]);
p+=str_len[0];
{
int index=1;
for(const T *str:args)
{
*p=spear_char;
++p;
hgl_cpy<T>(p,str,str_len[index])
p+=str_len[index];
}
fullename[total-1]=0;
}
return String<T>::newOf(fullname,total-1);
}
template<typename ...ARGS>
inline const String<char> Combine(const char *str1,ARGS...args)
{
return Combine<char>(HGL_DIRECTORY_SEPARATOR_RAWCHAR,str1,args...);
}
#ifdef HGL_SUPPORT_CHAR8_T
template<typename ...ARGS>
inline const String<char8_t> Combine(const char8_t *str1,ARGS...args)
{
return Combine<char8_t>(HGL_DIRECTORY_SEPARATOR_U8CHAR,str1,args...);
}
#endif//HGL_SUPPORT_CHAR8_T
#if HGL_OS == HGL_OS_Windows
template<typename ...ARGS>
inline const String<wchar_t> Combine(const wchar_t *str1,ARGS...args)
{
return Combine<wchar_t>(HGL_DIRECTORY_SEPARATOR_WCHAR,str1,args...);
}
#endif//HGL_OS == HGL_OS_Windows
template<typename T,typename ...ARGS>
inline const String<T> Combine(const T spear_char,const String<T> &str1,ARGS...args)
{
const int count=sizeof...(ARGS);
if(count<=0)
return str1;
int total_len=str1.Length()
for(const String<T> &str:args)
total+=str.Length()+1;
T *fullname=new T[total];
T *p=fullname;
hgl_cpy<T>(p,str1.c_str(),str1.Length());
p+=str1.Length();
{
int index=1;
for(const String<T> &str:args)
{
*p=spear_char;
++p;
hgl_cpy<T>(p,str.c_str(),str.Length())
p+=str1.Length();
}
fullename[total-1]=0;
}
return String<T>::newOf(fullname,total-1);
}
template<typename ...ARGS>
inline const String<char> Combine(const String<char> &str1,ARGS...args)
{
return Combine<char>(HGL_DIRECTORY_SEPARATOR_RAWCHAR,str1,args...);
}
#ifdef HGL_SUPPORT_CHAR8_T
template<typename ...ARGS>
inline const String<char8_t> Combine(const String<char8_t> &str1,ARGS...args)
{
return Combine<char8_t>(HGL_DIRECTORY_SEPARATOR_U8CHAR,str1,args...);
}
#endif//HGL_SUPPORT_CHAR8_T
#if HGL_OS == HGL_OS_Windows
template<typename ...ARGS>
inline const String<wchar_t> Combine(const String<wchar_t> &str1,ARGS...args)
{
return Combine<wchar_t>(HGL_DIRECTORY_SEPARATOR_WCHAR,str1,args...);
}
#endif//HGL_OS == HGL_OS_Windows
/**
* .<Br>
*
*/
template<typename T>
inline const String<T> ComboFilename(T **str_list,const int count,const T spear_char=(T)HGL_DIRECTORY_SEPARATOR_RAWCHAR)
inline const String<T> Combine(T **str_list,const int count,const T spear_char=(T)HGL_DIRECTORY_SEPARATOR_RAWCHAR)
{
int str_len[count];
for(int i=0;i<count;i++)
str_len=strlen(str_list[i]);
return ComboFilename(str_list,str_len,count,spear_char);
return Combine(str_list,str_len,count,spear_char);
}
/**
@ -93,7 +217,7 @@ namespace hgl
*
*/
template<typename T>
inline const String<T> ComboFilename(const StringList<T> &sl,const T spear_char=(T)HGL_DIRECTORY_SEPARATOR_RAWCHAR)
inline const String<T> Combine(const StringList<T> &sl,const T spear_char=(T)HGL_DIRECTORY_SEPARATOR_RAWCHAR)
{
const int count=sl.GetCount();
@ -116,7 +240,7 @@ namespace hgl
++index;
}
return ComboFilename(str_list.data(),str_len,count,spear_char);
return Combine(str_list.data(),str_len,count,spear_char);
}
/**
@ -124,7 +248,7 @@ namespace hgl
*
*/
template<typename T>
inline String<T> MergeFilename(const String<T> &pathname,const String<T> &filename,const T directory_separator_char,const T *directory_separator_str)
inline String<T> Combine(const String<T> &pathname,const String<T> &filename,const T directory_separator_char,const T *directory_separator_str)
{
String<T> fullname;
@ -369,16 +493,16 @@ namespace hgl
}
#ifdef HGL_SUPPORT_CHAR8_T
inline AnsiString MergeFilename(const AnsiString &pathname,const AnsiString &filename) ///<组合路径名与文件名
{return MergeFilename<char>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_RAWSTR);}
inline AnsiString Combine(const AnsiString &pathname,const AnsiString &filename) ///<组合路径名与文件名
{return Combine<char>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_RAWSTR);}
#endif//HGL_SUPPORT_CHAR8_T
inline U8String MergeFilename(const U8String &pathname,const U8String &filename) ///<组合路径名与文件名
{return MergeFilename<u8char>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_U8STR);}
inline U8String Combine(const U8String &pathname,const U8String &filename) ///<组合路径名与文件名
{return Combine<u8char>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_U8STR);}
#if HGL_OS == HGL_OS_Windows
inline WString MergeFilename(const WString &pathname,const WString &filename) ///<组合路径名与文件名
{return MergeFilename<wchar_t>(pathname,filename,L'\\',L"\\");}
inline WString Combine(const WString &pathname,const WString &filename) ///<组合路径名与文件名
{return Combine<wchar_t>(pathname,filename,HGL_DIRECTORY_SEPARATOR,HGL_DIRECTORY_SEPARATOR_STR);}
#endif//HGL_OS == HGL_OS_Windows
OSString FixFilename(const OSString &filename); ///<修正部分文件名问题

View File

@ -38,6 +38,8 @@ using os_char =wchar_t;
#define HGL_PLUGIN_FUNC extern "C" __declspec(dllexport) //插件函数定义
#define HGL_DIRECTORY_SEPARATOR_RAWCHAR '\\' //目录分隔符
#define HGL_DIRECTORY_SEPARATOR_U8CHAR U8_TEXT('\\') //目录分隔符
#define HGL_DIRECTORY_SEPARATOR_WCHAR U16_TEXT('\\') //目录分隔符
#define HGL_DIRECTORY_SEPARATOR_RAWSTR "\\" //目录分隔符
#define HGL_DIRECTORY_SEPARATOR OS_TEXT('\\') //目录分隔符
#define HGL_DIRECTORY_SEPARATOR_STR OS_TEXT("\\") //目录分隔符

View File

@ -208,7 +208,9 @@ SET(FILESYSTEM_INCLUDE_PATH ${CMCORE_ROOT_INCLUDE_PATH}/hgl/filesystem)
SET(FILESYSTEM_HEADER_FILES ${FILESYSTEM_INCLUDE_PATH}/EnumFile.h
${FILESYSTEM_INCLUDE_PATH}/EnumVolume.h
${FILESYSTEM_INCLUDE_PATH}/FileSystem.h)
${FILESYSTEM_INCLUDE_PATH}/FileSystem.h
${FILESYSTEM_INCLUDE_PATH}/Filename.h
)
SET(FILESYSTEM_SOURCE_FILES FileSystem/FileSystem.cpp
FileSystem/EnumFile.cpp)

View File

@ -397,7 +397,7 @@ namespace hgl
for(const OSString *pn:paths)
{
full_filename=MergeFilename(*pn,filename);
full_filename=Combine(*pn,filename);
exist=FileExist(full_filename);
@ -431,7 +431,7 @@ namespace hgl
{
for(const OSString *fn:filenames)
{
full_filename=MergeFilename(*pn,*fn);
full_filename=Combine(*pn,*fn);
exist=FileExist(full_filename);

View File

@ -41,12 +41,12 @@ namespace hgl
if(!GetLocalAppdataPath(local_app_data_path))
return(false);
cmgdk_path=filesystem::MergeFilename(local_app_data_path,OS_TEXT(".cmgdk"));
cmgdk_path=filesystem::Combine(local_app_data_path,OS_TEXT(".cmgdk"));
if(!filesystem::MakePath(cmgdk_path))
return(false);
fn=filesystem::MergeFilename(cmgdk_path,project_code);
fn=filesystem::Combine(cmgdk_path,project_code);
for(uint i=0;i<=0xFFFF;i++)
{

View File

@ -15,7 +15,7 @@ namespace hgl
{
AddFindPath(pn);
pn=MergeFilename(pn,OS_TEXT("Plug-ins"));
pn=Combine(pn,OS_TEXT("Plug-ins"));
AddFindPath(pn);
}
@ -23,7 +23,7 @@ namespace hgl
{
AddFindPath(pn);
pn=MergeFilename(pn,OS_TEXT("Plug-ins"));
pn=Combine(pn,OS_TEXT("Plug-ins"));
AddFindPath(pn);
}
}
@ -105,7 +105,7 @@ namespace hgl
for(uint i=0;i<fp_count;i++)
{
pi_fullfilename=MergeFilename(findpath[i],pi_filename);
pi_fullfilename=Combine(findpath[i],pi_filename);
if(!FileExist(pi_fullfilename))continue;