Michael Hansen
12 years ago
114 changed files with 981 additions and 2116 deletions
@ -1,503 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
/////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// plFileUtils - Namespace of fun file utilities
|
|
||||||
//
|
|
||||||
//// History /////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// 5.7.2002 mcn - Created
|
|
||||||
// 4.8.2003 chip - added FileCopy and FileMove for Unix
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#include "HeadSpin.h" |
|
||||||
#include "hsWindows.h" |
|
||||||
#include "plFileUtils.h" |
|
||||||
#include "hsFiles.h" |
|
||||||
#include "hsStringTokenizer.h" |
|
||||||
|
|
||||||
|
|
||||||
#include "plUnifiedTime/plUnifiedTime.h" |
|
||||||
|
|
||||||
#include <time.h> |
|
||||||
#include <sys/types.h> |
|
||||||
#include <sys/stat.h> |
|
||||||
#include <errno.h> |
|
||||||
|
|
||||||
|
|
||||||
#if HS_BUILD_FOR_WIN32 |
|
||||||
#include <direct.h> |
|
||||||
#include <io.h> |
|
||||||
#define mkdir _mkdir |
|
||||||
#define chdir _chdir |
|
||||||
#define chmod _chmod |
|
||||||
#define rmdir _rmdir |
|
||||||
#define unlink _unlink |
|
||||||
#endif |
|
||||||
|
|
||||||
#if HS_BUILD_FOR_UNIX |
|
||||||
#include <unistd.h> |
|
||||||
#include <utime.h> |
|
||||||
#endif |
|
||||||
|
|
||||||
|
|
||||||
//// CreateDir ///////////////////////////////////////////////////////////////
|
|
||||||
// Creates the directory specified. Returns false if unsuccessful or
|
|
||||||
// directory already exists
|
|
||||||
|
|
||||||
bool plFileUtils::CreateDir( const char *path ) |
|
||||||
{ |
|
||||||
// Create our directory
|
|
||||||
#if HS_BUILD_FOR_WIN32 |
|
||||||
return ( mkdir( path ) == 0 ) ? true : ( errno==EEXIST ); |
|
||||||
#elif HS_BUILD_FOR_UNIX |
|
||||||
return ( mkdir( path, 0777 ) == 0 ) ? true : ( errno==EEXIST ); |
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::CreateDir( const wchar_t *path ) |
|
||||||
{ |
|
||||||
// Create our directory
|
|
||||||
#if HS_BUILD_FOR_WIN32 |
|
||||||
return ( _wmkdir( path ) == 0 ) ? true : ( errno==EEXIST ); |
|
||||||
#elif HS_BUILD_FOR_UNIX |
|
||||||
const char* cpath = hsWStringToString(path); |
|
||||||
bool ret = CreateDir(cpath); |
|
||||||
delete[] cpath; /* Free the string */ |
|
||||||
|
|
||||||
return ret; |
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::RemoveDir(const char* path) |
|
||||||
{ |
|
||||||
return (rmdir(path) == 0); |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::RemoveDirTree(const char * path) |
|
||||||
{ |
|
||||||
hsFolderIterator it(path); |
|
||||||
while (it.NextFile()) |
|
||||||
{ |
|
||||||
const char * fname = it.GetFileName(); |
|
||||||
if ( fname[0]=='.' ) |
|
||||||
continue; |
|
||||||
char pathAndName[128]; |
|
||||||
it.GetPathAndName(pathAndName); |
|
||||||
if ( it.IsDirectory() ) |
|
||||||
{ |
|
||||||
RemoveDirTree( pathAndName ); |
|
||||||
RemoveDir( pathAndName ); |
|
||||||
} |
|
||||||
else |
|
||||||
{ |
|
||||||
RemoveFile( pathAndName ); |
|
||||||
} |
|
||||||
} |
|
||||||
RemoveDir( path ); |
|
||||||
|
|
||||||
return 1; |
|
||||||
} |
|
||||||
|
|
||||||
//// RemoveFile ////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
bool plFileUtils::RemoveFile(const char* filename, bool delReadOnly) |
|
||||||
{ |
|
||||||
if (delReadOnly) |
|
||||||
chmod(filename, S_IWRITE); |
|
||||||
return (unlink(filename) == 0); |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::RemoveFile(const wchar_t* filename, bool delReadOnly) |
|
||||||
{ |
|
||||||
#ifdef HS_BUILD_FOR_WIN32 |
|
||||||
if (delReadOnly) |
|
||||||
_wchmod(filename, S_IWRITE); |
|
||||||
return (_wunlink(filename) == 0); |
|
||||||
#elif HS_BUILD_FOR_UNIX |
|
||||||
const char* cfilename = hsWStringToString(filename); |
|
||||||
bool ret = RemoveFile(cfilename, delReadOnly); |
|
||||||
delete[] cfilename; /* Free the string */ |
|
||||||
|
|
||||||
return ret; |
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::FileCopy(const char* existingFile, const char* newFile) |
|
||||||
{ |
|
||||||
wchar_t* wExisting = hsStringToWString(existingFile); |
|
||||||
wchar_t* wNew = hsStringToWString(newFile); |
|
||||||
bool ret = FileCopy(wExisting, wNew); |
|
||||||
delete [] wExisting; |
|
||||||
delete [] wNew; |
|
||||||
return ret; |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::FileCopy(const wchar_t* existingFile, const wchar_t* newFile) |
|
||||||
{ |
|
||||||
#if HS_BUILD_FOR_WIN32 |
|
||||||
return (::CopyFileW(existingFile, newFile, FALSE) != 0); |
|
||||||
#elif HS_BUILD_FOR_UNIX |
|
||||||
char data[1500]; |
|
||||||
const char* cexisting = hsWStringToString(existingFile); |
|
||||||
const char* cnew = hsWStringToString(newFile); |
|
||||||
FILE* fp = fopen(cexisting, "rb"); |
|
||||||
FILE* fw = fopen(cnew, "w"); |
|
||||||
delete[] cexisting; |
|
||||||
delete[] cnew; |
|
||||||
int num = 0; |
|
||||||
bool retVal = true; |
|
||||||
if (fp && fw){ |
|
||||||
while(!feof(fp)){ |
|
||||||
num = fread(data, sizeof( char ), 1500, fp); |
|
||||||
if( ferror( fp ) ) { |
|
||||||
retVal = false; |
|
||||||
break; |
|
||||||
} |
|
||||||
fwrite(data, sizeof( char ), num, fw); |
|
||||||
} |
|
||||||
fclose(fp); |
|
||||||
fclose(fw); |
|
||||||
} else { |
|
||||||
retVal = false; |
|
||||||
} |
|
||||||
return retVal; |
|
||||||
#else |
|
||||||
hsAssert(0, "Not implemented"); |
|
||||||
return false; |
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::FileMove(const char* existingFile, const char* newFile) |
|
||||||
{ |
|
||||||
#if HS_BUILD_FOR_WIN32 |
|
||||||
return (::MoveFile(existingFile, newFile) != 0); |
|
||||||
#elif HS_BUILD_FOR_UNIX |
|
||||||
FileCopy(existingFile,newFile); |
|
||||||
return( RemoveFile( existingFile )==0); |
|
||||||
#else |
|
||||||
hsAssert(0, "Not implemented"); |
|
||||||
return false; |
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::FileMove(const wchar_t* existingFile, const wchar_t* newFile) |
|
||||||
{ |
|
||||||
#if HS_BUILD_FOR_WIN32 |
|
||||||
return (::MoveFileW(existingFile, newFile) != 0); |
|
||||||
#elif HS_BUILD_FOR_UNIX |
|
||||||
FileCopy(existingFile,newFile); |
|
||||||
return( RemoveFile( existingFile )==0); |
|
||||||
#else |
|
||||||
hsAssert(0, "Not implemented"); |
|
||||||
return false; |
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::FileExists(const wchar_t* file) |
|
||||||
{ |
|
||||||
FILE* fp = hsWFopen(file, L"rb"); |
|
||||||
bool retVal = (fp != nil); |
|
||||||
if (fp) |
|
||||||
fclose(fp); |
|
||||||
return retVal; |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::FileExists(const char* file) |
|
||||||
{ |
|
||||||
FILE* fp = fopen(file, "rb"); |
|
||||||
bool retVal = (fp != nil); |
|
||||||
if (fp) |
|
||||||
fclose(fp); |
|
||||||
return retVal; |
|
||||||
} |
|
||||||
|
|
||||||
//// EnsureFilePathExists ////////////////////////////////////////////////////
|
|
||||||
// Given a filename with path, makes sure the file's path exists
|
|
||||||
|
|
||||||
bool plFileUtils::EnsureFilePathExists( const char *filename ) |
|
||||||
{ |
|
||||||
wchar_t* wFilename = hsStringToWString(filename); |
|
||||||
bool ret = EnsureFilePathExists(wFilename); |
|
||||||
delete [] wFilename; |
|
||||||
return ret; |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::EnsureFilePathExists( const wchar_t *filename ) |
|
||||||
{ |
|
||||||
hsWStringTokenizer izer( filename, L"\\/" ); |
|
||||||
|
|
||||||
bool lastWorked = false; |
|
||||||
wchar_t token[ kFolderIterator_MaxPath ]; |
|
||||||
|
|
||||||
|
|
||||||
while( izer.Next( token, arrsize( token ) ) && izer.HasMoreTokens() ) |
|
||||||
{ |
|
||||||
// Want the full path from the start of the string
|
|
||||||
lastWorked = CreateDir( izer.fString ); |
|
||||||
izer.RestoreLastTerminator(); |
|
||||||
} |
|
||||||
|
|
||||||
return lastWorked; |
|
||||||
} |
|
||||||
|
|
||||||
//// GetFileTimes ////////////////////////////////////////////////////////////
|
|
||||||
// Gets the creation and modification dates of the file specified. Returns
|
|
||||||
// false if unsuccessful
|
|
||||||
|
|
||||||
bool plFileUtils::GetFileTimes( const char *path, plUnifiedTime *createTimeOut, plUnifiedTime *modifyTimeOut ) |
|
||||||
{ |
|
||||||
struct stat fileInfo; |
|
||||||
|
|
||||||
int result = stat( path, &fileInfo ); |
|
||||||
if( result != 0 ) |
|
||||||
return false; |
|
||||||
|
|
||||||
if( createTimeOut != nil ) |
|
||||||
*createTimeOut = plUnifiedTime( fileInfo.st_ctime ); |
|
||||||
if( modifyTimeOut != nil ) |
|
||||||
*modifyTimeOut = plUnifiedTime( fileInfo.st_mtime ); |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
plFileUtils::Modify plFileUtils::CompareModifyTimes(const char* file1, const char* file2) |
|
||||||
{ |
|
||||||
plUnifiedTime modTime1, modTime2; |
|
||||||
if (GetFileTimes(file1, nil, &modTime1) && |
|
||||||
GetFileTimes(file2, nil, &modTime2)) |
|
||||||
{ |
|
||||||
double diff = plUnifiedTime::GetTimeDifference(modTime1, modTime2); |
|
||||||
|
|
||||||
if (hsABS(diff) <= 2) |
|
||||||
return kFilesEqual; |
|
||||||
else if (diff > 0) |
|
||||||
return kFile1Newer; |
|
||||||
else |
|
||||||
return kFile2Newer; |
|
||||||
} |
|
||||||
|
|
||||||
return kFileError; |
|
||||||
} |
|
||||||
|
|
||||||
bool plFileUtils::SetModifyTime( const char * filename, const plUnifiedTime & timestamp ) |
|
||||||
{ |
|
||||||
#ifdef HS_BUILD_FOR_WIN32 |
|
||||||
HANDLE hFile = CreateFile(filename, |
|
||||||
GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE, |
|
||||||
nil,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,nil); |
|
||||||
if (hFile==INVALID_HANDLE_VALUE) |
|
||||||
return false; |
|
||||||
SYSTEMTIME systime; |
|
||||||
systime.wDay = timestamp.GetDay(); |
|
||||||
systime.wDayOfWeek = timestamp.GetDayOfWeek(); |
|
||||||
systime.wHour = timestamp.GetHour(); |
|
||||||
systime.wMilliseconds = 0; |
|
||||||
systime.wMinute = timestamp.GetMinute(); |
|
||||||
systime.wMonth = timestamp.GetMonth(); |
|
||||||
systime.wSecond = timestamp.GetSecond(); |
|
||||||
systime.wYear = timestamp.GetYear(); |
|
||||||
FILETIME localFileTime, filetime; |
|
||||||
SystemTimeToFileTime(&systime,&localFileTime); |
|
||||||
LocalFileTimeToFileTime(&localFileTime,&filetime); |
|
||||||
SetFileTime(hFile,nil,nil,&filetime); |
|
||||||
CloseHandle(hFile); |
|
||||||
return true; |
|
||||||
|
|
||||||
#elif HS_BUILD_FOR_UNIX |
|
||||||
struct stat sbuf; |
|
||||||
int result = stat( filename, &sbuf ); |
|
||||||
if( result ) |
|
||||||
return false; |
|
||||||
struct utimbuf utb; |
|
||||||
utb.actime = sbuf.st_atime; |
|
||||||
utb.modtime = timestamp.GetSecs(); |
|
||||||
result = utime( filename, &utb ); |
|
||||||
if( result ) |
|
||||||
return false; |
|
||||||
return true; |
|
||||||
|
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
//// StripPath ///////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
const char* plFileUtils::GetFileName(const char* path) |
|
||||||
{ |
|
||||||
const char* c = strrchr(path, '/'); |
|
||||||
if (c == nil) |
|
||||||
c = strrchr(path, '\\'); |
|
||||||
|
|
||||||
if (c == nil) |
|
||||||
c = path; |
|
||||||
else |
|
||||||
c++; |
|
||||||
|
|
||||||
return c; |
|
||||||
} |
|
||||||
|
|
||||||
const wchar_t* plFileUtils::GetFileName(const wchar_t* path) |
|
||||||
{ |
|
||||||
const wchar_t* c = wcsrchr(path, L'/'); |
|
||||||
if (c == nil) |
|
||||||
c = wcsrchr(path, L'\\'); |
|
||||||
|
|
||||||
if (c == nil) |
|
||||||
c = path; |
|
||||||
else |
|
||||||
c++; |
|
||||||
|
|
||||||
return c; |
|
||||||
} |
|
||||||
|
|
||||||
void plFileUtils::StripFile(char* pathAndName) |
|
||||||
{ |
|
||||||
char* fileName = (char*)GetFileName(pathAndName); |
|
||||||
if (fileName != pathAndName) |
|
||||||
*fileName = '\0'; |
|
||||||
} |
|
||||||
|
|
||||||
void plFileUtils::StripFile(wchar_t* pathAndName) |
|
||||||
{ |
|
||||||
wchar_t* fileName = (wchar_t*)GetFileName(pathAndName); |
|
||||||
if (fileName != pathAndName) |
|
||||||
*fileName = L'\0'; |
|
||||||
} |
|
||||||
|
|
||||||
void plFileUtils::StripExt(char* fileName) |
|
||||||
{ |
|
||||||
char* ext = (char*)GetFileExt(fileName); |
|
||||||
if (ext) |
|
||||||
*(ext-1) = '\0'; |
|
||||||
} |
|
||||||
|
|
||||||
void plFileUtils::StripExt(wchar_t* fileName) |
|
||||||
{ |
|
||||||
wchar_t* ext = (wchar_t*)GetFileExt(fileName); |
|
||||||
if (ext) |
|
||||||
*(ext-1) = L'\0'; |
|
||||||
} |
|
||||||
|
|
||||||
const char* plFileUtils::GetFileExt(const char* pathAndName) |
|
||||||
{ |
|
||||||
const char* fileName = GetFileName(pathAndName); |
|
||||||
if (fileName) |
|
||||||
{ |
|
||||||
const char* ext = strrchr(fileName, '.'); |
|
||||||
if (ext) |
|
||||||
return ext+1; |
|
||||||
} |
|
||||||
|
|
||||||
return nil; |
|
||||||
} |
|
||||||
|
|
||||||
const wchar_t* plFileUtils::GetFileExt(const wchar_t* pathAndName) |
|
||||||
{ |
|
||||||
const wchar_t* fileName = GetFileName(pathAndName); |
|
||||||
if (fileName) |
|
||||||
{ |
|
||||||
const wchar_t* ext = wcsrchr(fileName, L'.'); |
|
||||||
if (ext) |
|
||||||
return ext+1; |
|
||||||
} |
|
||||||
|
|
||||||
return nil; |
|
||||||
} |
|
||||||
|
|
||||||
void plFileUtils::AddSlash(char* path) |
|
||||||
{ |
|
||||||
char lastChar = path[strlen(path)-1]; |
|
||||||
if (lastChar != '\\' && lastChar != '/') |
|
||||||
#if HS_BUILD_FOR_WIN32 |
|
||||||
strcat(path, "\\"); |
|
||||||
#else |
|
||||||
strcat(path, "/"); |
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
void plFileUtils::AddSlash(wchar_t* path) |
|
||||||
{ |
|
||||||
wchar_t lastChar = path[wcslen(path)-1]; |
|
||||||
if (lastChar != L'\\' && lastChar != L'/') |
|
||||||
#if HS_BUILD_FOR_WIN32 |
|
||||||
wcscat(path, L"\\"); |
|
||||||
#else |
|
||||||
wcscat(path, L"/"); |
|
||||||
#endif |
|
||||||
} |
|
||||||
|
|
||||||
void plFileUtils::ConcatFileName(char* path, const char* fileName) |
|
||||||
{ |
|
||||||
AddSlash(path); |
|
||||||
strcat(path, fileName); |
|
||||||
} |
|
||||||
|
|
||||||
void plFileUtils::ConcatFileName(wchar_t* path, const wchar_t* fileName) |
|
||||||
{ |
|
||||||
AddSlash(path); |
|
||||||
wcscat(path, fileName); |
|
||||||
} |
|
||||||
|
|
||||||
//// GetFileSize /////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
uint32_t plFileUtils::GetFileSize( const char *path ) |
|
||||||
{ |
|
||||||
wchar_t* wPath = hsStringToWString(path); |
|
||||||
uint32_t ret = GetFileSize(wPath); |
|
||||||
delete [] wPath; |
|
||||||
return ret; |
|
||||||
} |
|
||||||
|
|
||||||
uint32_t plFileUtils::GetFileSize( const wchar_t *path ) |
|
||||||
{ |
|
||||||
uint32_t len = 0; |
|
||||||
|
|
||||||
hsUNIXStream str; |
|
||||||
if (str.Open(plString::FromWchar(path), "rb")) |
|
||||||
{ |
|
||||||
len = str.GetEOF(); |
|
||||||
str.Close(); |
|
||||||
} |
|
||||||
|
|
||||||
return len; |
|
||||||
} |
|
@ -1,116 +0,0 @@ |
|||||||
/*==LICENSE==*
|
|
||||||
|
|
||||||
CyanWorlds.com Engine - MMOG client, server and tools |
|
||||||
Copyright (C) 2011 Cyan Worlds, Inc. |
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify |
|
||||||
it under the terms of the GNU General Public License as published by |
|
||||||
the Free Software Foundation, either version 3 of the License, or |
|
||||||
(at your option) any later version. |
|
||||||
|
|
||||||
This program is distributed in the hope that it will be useful, |
|
||||||
but WITHOUT ANY WARRANTY; without even the implied warranty of |
|
||||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
|
||||||
GNU General Public License for more details. |
|
||||||
|
|
||||||
You should have received a copy of the GNU General Public License |
|
||||||
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
|
|
||||||
Additional permissions under GNU GPL version 3 section 7 |
|
||||||
|
|
||||||
If you modify this Program, or any covered work, by linking or |
|
||||||
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
||||||
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
||||||
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
||||||
(or a modified version of those libraries), |
|
||||||
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
||||||
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
||||||
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
||||||
licensors of this Program grant you additional |
|
||||||
permission to convey the resulting work. Corresponding Source for a |
|
||||||
non-source form of such a combination shall include the source code for |
|
||||||
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
||||||
work. |
|
||||||
|
|
||||||
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
||||||
or by snail mail at: |
|
||||||
Cyan Worlds, Inc. |
|
||||||
14617 N Newport Hwy |
|
||||||
Mead, WA 99021 |
|
||||||
|
|
||||||
*==LICENSE==*/ |
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// plFileUtils - Namespace of fun file utilities
|
|
||||||
//
|
|
||||||
//// History /////////////////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// 5.7.2002 mcn - Created
|
|
||||||
//
|
|
||||||
//////////////////////////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
#ifndef _plFileUtils_h |
|
||||||
#define _plFileUtils_h |
|
||||||
|
|
||||||
class plUnifiedTime; |
|
||||||
|
|
||||||
namespace plFileUtils |
|
||||||
{ |
|
||||||
// Creates the directory specified. Returns false if unsuccessful or directory already exists
|
|
||||||
bool CreateDir( const char *path );
|
|
||||||
bool CreateDir( const wchar_t *path );
|
|
||||||
bool RemoveDir(const char* path); |
|
||||||
bool RemoveDirTree(const char * path); |
|
||||||
|
|
||||||
// delete file from disk
|
|
||||||
bool RemoveFile(const char* filename, bool delReadOnly=false); |
|
||||||
bool RemoveFile(const wchar_t* filename, bool delReadOnly=false); |
|
||||||
|
|
||||||
bool FileCopy(const char* existingFile, const char* newFile); |
|
||||||
bool FileCopy(const wchar_t* existingFile, const wchar_t* newFile); |
|
||||||
bool FileMove(const char* existingFile, const char* newFile); |
|
||||||
bool FileMove(const wchar_t* existingFile, const wchar_t* newFile); |
|
||||||
|
|
||||||
bool FileExists(const char* file); |
|
||||||
bool FileExists(const wchar_t* file); |
|
||||||
|
|
||||||
// Given a filename with path, makes sure the file's path exists
|
|
||||||
bool EnsureFilePathExists( const char *filename ); |
|
||||||
bool EnsureFilePathExists( const wchar_t *filename ); |
|
||||||
|
|
||||||
// Gets the creation and modification dates of the file specified. Returns false if unsuccessful
|
|
||||||
bool GetFileTimes( const char *path, plUnifiedTime *createTimeOut, plUnifiedTime *modifyTimeOut ); |
|
||||||
// Compares file times, taking into account NTFS/FAT32 time issues
|
|
||||||
enum Modify { kFileError, kFilesEqual, kFile1Newer, kFile2Newer }; |
|
||||||
Modify CompareModifyTimes(const char* file1, const char* file2); |
|
||||||
// Set file modify time
|
|
||||||
bool SetModifyTime( const char * filename, const plUnifiedTime & time ); |
|
||||||
|
|
||||||
// Return a pointer into the given string at the start of the actual filename (i.e. past any path info)
|
|
||||||
const char* GetFileName(const char* pathAndName); |
|
||||||
const wchar_t* GetFileName(const wchar_t* pathAndName); |
|
||||||
// Get the file extension (without the .), or nil if it doesn't have one
|
|
||||||
const char* GetFileExt(const char* pathAndName); |
|
||||||
const wchar_t* GetFileExt(const wchar_t* pathAndName); |
|
||||||
|
|
||||||
// Strips the filename off the given full path
|
|
||||||
void StripFile(char* pathAndName); |
|
||||||
void StripFile(wchar_t* pathAndName); |
|
||||||
void StripExt(char* fileName); |
|
||||||
void StripExt(wchar_t* fileName); |
|
||||||
|
|
||||||
// Get the size of the given file in bytes
|
|
||||||
uint32_t GetFileSize( const char *path ); |
|
||||||
uint32_t GetFileSize( const wchar_t *path ); |
|
||||||
|
|
||||||
// Adds a slash to the end of a filename (or does nothing if it's already there)
|
|
||||||
void AddSlash(char* path); |
|
||||||
void AddSlash(wchar_t* path); |
|
||||||
|
|
||||||
// Concatenates fileName onto path, making sure to add a slash if necessary
|
|
||||||
void ConcatFileName(char* path, const char* fileName); |
|
||||||
void ConcatFileName(wchar_t* path, const wchar_t* fileName); |
|
||||||
}; |
|
||||||
|
|
||||||
|
|
||||||
#endif // _plFileUtils_h
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in new issue