145 lines
4.0 KiB
C++
145 lines
4.0 KiB
C++
////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Crytek Engine Source File.
|
|
// Copyright (C), Crytek Studios, 2002.
|
|
// -------------------------------------------------------------------------
|
|
// File name: pathutil.h
|
|
// Version: v1.00
|
|
// Created: 5/11/2002 by Timur.
|
|
// Compilers: Visual Studio.NET
|
|
// Description: Utility functions to simplify working with paths.
|
|
// -------------------------------------------------------------------------
|
|
// History:
|
|
//
|
|
////////////////////////////////////////////////////////////////////////////
|
|
|
|
#ifndef __pathutil_h__
|
|
#define __pathutil_h__
|
|
#pragma once
|
|
|
|
namespace Path
|
|
{
|
|
//! Split full file name to path and filename
|
|
//! @param filepath [IN] Full file name inclusing path.
|
|
//! @param path [OUT] Extracted file path.
|
|
//! @param file [OUT] Extracted file (with extension).
|
|
inline void Split( const CString &filepath,CString &path,CString &file )
|
|
{
|
|
char path_buffer[_MAX_PATH];
|
|
char drive[_MAX_DRIVE];
|
|
char dir[_MAX_DIR];
|
|
char fname[_MAX_FNAME];
|
|
char ext[_MAX_EXT];
|
|
_splitpath( filepath,drive,dir,fname,ext );
|
|
_makepath( path_buffer,drive,dir,0,0 );
|
|
path = path_buffer;
|
|
_makepath( path_buffer,0,0,fname,ext );
|
|
file = path_buffer;
|
|
}
|
|
|
|
//! Split full file name to path and filename
|
|
//! @param filepath [IN] Full file name inclusing path.
|
|
//! @param path [OUT] Extracted file path.
|
|
//! @param filename [OUT] Extracted file (without extension).
|
|
//! @param ext [OUT] Extracted files extension.
|
|
inline void Split( const CString &filepath,CString &path,CString &filename,CString &fext )
|
|
{
|
|
char path_buffer[_MAX_PATH];
|
|
char drive[_MAX_DRIVE];
|
|
char dir[_MAX_DIR];
|
|
char fname[_MAX_FNAME];
|
|
char ext[_MAX_EXT];
|
|
_splitpath( filepath,drive,dir,fname,ext );
|
|
_makepath( path_buffer,drive,dir,0,0 );
|
|
path = path_buffer;
|
|
filename = fname;
|
|
fext = ext;
|
|
}
|
|
|
|
//! Extract extension from full specified file path.
|
|
inline CString GetExt( const CString &filepath )
|
|
{
|
|
char ext[_MAX_EXT];
|
|
_splitpath( filepath,0,0,0,ext );
|
|
if (ext[0] == '.')
|
|
return ext+1;
|
|
|
|
return ext;
|
|
}
|
|
|
|
//! Extract path from full specified file path.
|
|
inline CString GetPath( const CString &filepath )
|
|
{
|
|
char path_buffer[_MAX_PATH];
|
|
char drive[_MAX_DRIVE];
|
|
char dir[_MAX_DIR];
|
|
_splitpath( filepath,drive,dir,0,0 );
|
|
_makepath( path_buffer,drive,dir,0,0 );
|
|
return path_buffer;
|
|
}
|
|
|
|
//! Extract file name with extension from full specified file path.
|
|
inline CString GetFile( const CString &filepath )
|
|
{
|
|
char path_buffer[_MAX_PATH];
|
|
char fname[_MAX_FNAME];
|
|
char ext[_MAX_EXT];
|
|
_splitpath( filepath,0,0,fname,ext );
|
|
_makepath( path_buffer,0,0,fname,ext );
|
|
return path_buffer;
|
|
}
|
|
|
|
//! Extract file name without extension from full specified file path.
|
|
inline CString GetFileName( const CString &filepath )
|
|
{
|
|
char fname[_MAX_FNAME];
|
|
_splitpath( filepath,0,0,fname,0 );
|
|
return fname;
|
|
}
|
|
|
|
//! Removes the trailing backslash from a given path.
|
|
inline CString RemoveBackslash( const CString &path )
|
|
{
|
|
if (path.IsEmpty() || path[path.GetLength()-1] != '\\')
|
|
return path;
|
|
return path.Mid( 0,path.GetLength()-1 );
|
|
}
|
|
|
|
//! add a backslash if needed
|
|
inline CString AddBackslash( const CString &path )
|
|
{
|
|
if(path.IsEmpty() || path[path.GetLength()-1] == '\\')
|
|
return path;
|
|
|
|
return path + "\\";
|
|
}
|
|
|
|
//! Replace extension for givven file.
|
|
inline CString ReplaceExtension( const CString &filepath,const CString &ext )
|
|
{
|
|
char path_buffer[_MAX_PATH];
|
|
char drive[_MAX_DRIVE];
|
|
char dir[_MAX_DIR];
|
|
char fname[_MAX_FNAME];
|
|
_splitpath( filepath,drive,dir,fname,0 );
|
|
_makepath( path_buffer,drive,dir,fname,ext );
|
|
return path_buffer;
|
|
}
|
|
|
|
//! Makes a fully specified file path from path and file name.
|
|
inline CString Make( const CString &path,const CString &file )
|
|
{
|
|
return AddBackslash(path) + file;
|
|
}
|
|
|
|
//! Makes a fully specified file path from path and file name.
|
|
inline CString Make( const CString &dir,const CString &filename,const CString &ext )
|
|
{
|
|
char path_buffer[_MAX_PATH];
|
|
_makepath( path_buffer,NULL,dir,filename,ext );
|
|
return path_buffer;
|
|
}
|
|
};
|
|
|
|
#endif // __pathutil_h__
|