added GetOSLibararyPath and FindFileOnPaths functions.

This commit is contained in:
hyzboy 2022-03-31 18:13:36 +08:00
parent a4d1ed0c3c
commit 08d2fa2a1f
3 changed files with 82 additions and 1 deletions

View File

@ -46,6 +46,20 @@ namespace hgl
bool GetCurrentProgramPath(OSString &); ///<取得当前程序所在路径
bool GetLocalAppdataPath(OSString &); ///<取得当前用户应用程序数据存放路径
bool GetOSLibararyPath(OSString &); ///<取得操作系统共用动态库路径
/**
* @param filename
* @param user_data
* @param exist
* @return
*/
typedef bool (*OnFindedFileFUNC)(const OSString &filename,void *user_data,bool exist);
const uint FindFileOnPaths(const OSString &filename,const OSStringList &paths,void *user_data,OnFindedFileFUNC ff); ///<在多个目录内查找一个文件
const uint FindFileOnPaths(const OSStringList &filenames,const OSStringList &paths,void *user_data,OnFindedFileFUNC ff); ///<在多个目录内查找一个文件,这个文件可能有多个文件名
/**
*
*

View File

@ -79,7 +79,7 @@ namespace hgl
*
*/
template<typename T>
inline const String<T> ComboFilename(const StringList<String<T>> &sl,const T spear_char=(T)HGL_DIRECTORY_SEPARATOR_RAWCHAR)
inline const String<T> ComboFilename(const StringList<T> &sl,const T spear_char=(T)HGL_DIRECTORY_SEPARATOR_RAWCHAR)
{
T **str_list=AutoDeleteArray<T *>(sl.GetCount());
int *str_len=AutoDeleteArray<int>(sl.GetCount());

View File

@ -379,5 +379,72 @@ namespace hgl
return(true);
}
/**
*
* @param filename
* @param paths
* @param user_data
* @param ff
*/
const uint FindFileOnPaths(const OSString &filename,const OSStringList &paths,void *user_data,OnFindedFileFUNC ff)
{
if(filename.IsEmpty()||paths.GetCount()<=0)return(0);
if(ff==nullptr)return 0;
uint count=0;
bool exist;
OSString full_filename;
for(const OSString *pn:paths)
{
full_filename=MergeFilename(*pn,filename);
exist=FileExist(full_filename);
if(exist)
++count;
if(!ff(full_filename,user_data,exist))
return(count);
}
return count;
}
/**
*
* @param filenames
* @param paths
* @param user_data
* @param ff
*/
const uint FindFileOnPaths(const OSStringList &filenames,const OSStringList &paths,void *user_data,OnFindedFileFUNC ff)
{
if(filenames.GetCount()<=0||paths.GetCount()<=0)return(0);
if(ff==nullptr)return 0;
uint count=0;
bool exist;
OSString full_filename;
for(const OSString *pn:paths)
{
for(const OSString *fn:filenames)
{
full_filename=MergeFilename(*pn,*fn);
exist=FileExist(full_filename);
if(exist)
++count;
if(!ff(full_filename,user_data,exist))
return(count);
}
}
return count;
}
}//namespace filesystem
}//namespace hgl