在实际编码过程中会对文件名、路径进行解析等操作,GDAL给我提供一些简单常用的函数接口,在cpl_conv.h头文件中,我们来看看吧!
/* ----------------------------------------------------- */
/* 获取可执行文件的路径 */
/* ----------------------------------------------------- */
int CPL_DLL CPLGetExecPath( char *pszPathBuf, int nMaxLength );
/* ----------------------------------------------------- */
/* 文件名处理函数 */
/* ----------------------------------------------------- */
const char CPL_DLL *CPLGetPath( const char * );
const char CPL_DLL *CPLGetDirname( const char * );
const char CPL_DLL *CPLGetFilename( const char * );
const char CPL_DLL *CPLGetBasename( const char * ) ;
const char CPL_DLL *CPLGetExtension( const char * );
char CPL_DLL *CPLGetCurrentDir(void);
const char CPL_DLL *CPLFormFilename( const char *pszPath,
const char *pszBasename,
const char *pszExtension );
const char CPL_DLL *CPLFormCIFilename( const char *pszPath,
const char *pszBasename,
const char *pszExtension );
const char CPL_DLL *CPLResetExtension( const char *, const char * );
下面简单举个例子说明:
char szExecPath[1024];
// 执行体全路径
CPLGetExecPath(szExecPath, sizeof(szExecPath));
printf("CPLGetExecPath: %s\n", szExecPath);
// 返回文件名的目录路径部分
CPLString pszPath = CPLGetPath(szExecPath);
printf("CPLGetPath: %s\n", pszPath.c_str());
// 返回文件名的目录路径部分
// 与CPLGetPath区别是:如果传入的只是文件名没有路径,CPLGetDirname函数会返回点(.)
CPLString pszDirName = CPLGetDirname(szExecPath);
printf("CPLGetDirname: %s\n", pszDirName.c_str());
// 比较CPLGetPath和CPLGetDirname的区别
CPLString pszPath2 = CPLGetPath("test.shp");
printf("CPLGetPath: %s\n", pszPath2.c_str());
CPLString pszDirName2 = CPLGetDirname("test.shp");
printf("CPLGetDirname: %s\n", pszDirName2.c_str());
CPLString pszFileName = CPLGetFilename(szExecPath);
printf("CPLGetFilename: %s\n", pszFileName.c_str());
CPLString pszBaseName = CPLGetBasename(szExecPath);
printf("CPLGetBasename: %s\n", pszBaseName.c_str());
CPLString pszExtension = CPLGetExtension(szExecPath);
printf("CPLGetExtension: %s\n", pszExtension.c_str());
CPLString pszZipPath = CPLFormFilename(pszDirName, pszBaseName, "zip");
printf("CPLFormFilename: %s\n", pszZipPath.c_str());
CPLString pszShpPath = CPLResetExtension(pszZipPath, "shp");
printf("CPLResetExtension: %s\n", pszShpPath.c_str());