fbxfile.h

Go to the documentation of this file.
00001 /****************************************************************************************
00002  
00003    Copyright (C) 2013 Autodesk, Inc.
00004    All rights reserved.
00005  
00006    Use of this software is subject to the terms of the Autodesk license agreement
00007    provided at the time of installation or download, or which otherwise accompanies
00008    this software in either electronic or hard copy form.
00009  
00010 ****************************************************************************************/
00011 
00013 #ifndef _FBXSDK_CORE_BASE_FILE_H_
00014 #define _FBXSDK_CORE_BASE_FILE_H_
00015 
00016 #include <fbxsdk/fbxsdk_def.h>
00017 
00018 #include <fbxsdk/core/base/fbxstring.h>
00019 
00020 #include <fbxsdk/fbxsdk_nsbegin.h>
00021 
00022 class FbxStream;
00023 
00027 class FBXSDK_DLL FbxFile
00028 {
00029 public:
00030     enum EMode {eNone, eReadOnly, eReadWrite, eCreateWriteOnly, eCreateReadWrite, eCreateAppend};
00031     enum ESeekPos {eBegin, eCurrent, eEnd};
00032 
00033     FbxFile();
00034     virtual ~FbxFile();
00035 
00042     virtual bool        Open(const char* pFileName_UTF8, const EMode pMode=eCreateReadWrite, const bool pBinary=true);
00043 
00050     virtual bool        Open(FbxStream* pStream, void* pStreamData, const char* pMode);
00051 
00055     virtual bool        Close();
00056 
00061     virtual void        Seek(const FbxInt64 pOffset, const ESeekPos pSeekPos=eBegin);
00062 
00066     virtual FbxInt64    Tell() const;
00067 
00073     virtual size_t      Read(void* pDstBuf, const size_t pSize);
00074 
00081     virtual char*       ReadString(char* pDstBuf, const size_t pDstSize, bool pStopAtFirstWhiteSpace=false);
00082 
00088     virtual size_t      Write(const void* pSrcBuf, const size_t pSize);
00089 
00095     virtual bool        WriteFormat(const char* pFormat, ...);
00096 
00105     virtual bool        Truncate(const FbxInt64 pSize);
00106 
00110     virtual bool        EndOfFile() const;
00111 
00115     virtual FbxInt64    GetSize();
00116 
00121     virtual void        GetMemoryFileInfo(void** pMemPtr, size_t pSize);
00122 
00126     bool                IsOpen() const;
00127 
00131     bool                IsStream() const;
00132 
00136     const char*         GetFilePathName() const;
00137 
00141     EMode               GetFileMode() const;
00142 
00146     int                 GetLastError();
00147 
00150     void                ClearError();
00151 
00152 protected:
00153     FILE*               mFilePtr;
00154     FbxStream*          mStreamPtr;
00155     bool                mIsOpen;
00156     bool                mIsStream;
00157     EMode               mMode;
00158     FbxString           mFileName;
00159 };
00160 
00161 class FBXSDK_DLL FbxFileUtils
00162 {
00163 public:
00168     static bool Delete(const char* pFileName_UTF8);
00169 
00175     static bool Rename(const char* pFileName_UTF8, const char* pNewName_UTF8);
00176 
00182     static bool Copy(const char* pDestination_UTF8, const char* pSource_UTF8);
00183 
00185     static FbxLong Size(const char* pFilePath_UTF8);
00186 
00191     static bool Exist(const char* pFilePath_UTF8);
00192 
00197     static bool IsReadOnly(const char* pFilePath_UTF8);
00198 
00199     // We return a KLong that in fact is a cast of a time_t.
00201     static FbxLong GetLastDate(const char* pPath_UTF8);
00202 
00204     static bool SetLastDate(const char* pPath_UTF8, FbxLong pTime);
00205 
00211     static char* FGets(char* pStr, int pSize, FILE* pStream);
00212 };
00213 
00214 template<class T> inline const T FbxSwab(const T x)
00215 {
00216     switch( sizeof(x) )
00217     {
00218         case 2:
00219         {
00220             FbxUInt8 t[2];
00221             t[0] = ((FbxUInt8*)&x)[1];
00222             t[1] = ((FbxUInt8*)&x)[0];
00223             return *(T*)&t;
00224         }
00225 
00226         case 4:
00227         {
00228             FbxUInt8 t[4];
00229             t[0] = ((FbxUInt8*)&x)[3];
00230             t[1] = ((FbxUInt8*)&x)[2];
00231             t[2] = ((FbxUInt8*)&x)[1];
00232             t[3] = ((FbxUInt8*)&x)[0];
00233             return *(T*)&t;
00234         }
00235 
00236         case 8:
00237         {
00238             FbxUInt8 t[8];
00239             t[0] = ((FbxUInt8*)&x)[7];
00240             t[1] = ((FbxUInt8*)&x)[6];
00241             t[2] = ((FbxUInt8*)&x)[5];
00242             t[3] = ((FbxUInt8*)&x)[4];
00243             t[4] = ((FbxUInt8*)&x)[3];
00244             t[5] = ((FbxUInt8*)&x)[2];
00245             t[6] = ((FbxUInt8*)&x)[1];
00246             t[7] = ((FbxUInt8*)&x)[0];
00247             return *(T*)&t;
00248         }
00249 
00250         default:
00251             return x;
00252     }
00253 }
00254 
00255 #include <fbxsdk/fbxsdk_nsend.h>
00256 
00257 #endif /* _FBXSDK_CORE_BASE_FILE_H_ */