Subversion Repositories spk

Rev

Rev 1 | Blame | Compare with Previous | Last modification | View Log | RSS feed

#ifndef __FILE_IO_H__
#define __FILE_IO_H__

#include "CyString.h"
#include "StringList.h"
#include <fstream>
#include <vector>
#include "DirIO.h"

#include <time.h>

#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
#include <fcntl.h>
#include <io.h>
#define MY_SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
#else
#define MY_SET_BINARY_MODE(file)
#endif

#define EPOCH_DIFF 0x019DB1DED53E8000LL /* 116444736000000000 nsecs */
#define RATE_DIFF 10000000 /* 100 nsecs */

class C_File;

enum {FILEERR_NONE, FILEERR_NOFILE, FILEERR_NOOPEN, FILEERR_TOSMALL, FILEERR_NOWRITE};

class SPKEXPORT CFileIO
{
public:
        CFileIO ();
        CFileIO ( CyString filename );
        CFileIO ( C_File *file );
        ~CFileIO ();

        bool StartRead();
        bool StartReadOld();
        void StopRead();
        CyString ReadToEndLine(bool = true);
        bool AtEnd();

        time_t GetCreationTime();
        void SetCreationTime(time_t time);

        std::vector<CyString> *ReadLines();
        CyStringList *ReadLinesStr();
        bool WriteFile(std::vector<CyString> *lines);
        bool WriteFileUTF(std::vector<CyString> *lines);
        bool WriteFile(CyStringList *lines);

        bool Remove();
        bool Rename(CyString toFile);
        bool Copy(CyString toFile, bool keepTime = false);

        bool IsOpened();
        bool Open ( CyString filename, bool = true );
        void ReadFileSize ();

        CyString GetBaseName();
        CyString GetFullFilename () { return m_sFilename; }
        CyString GetFilename () { return m_sFile; }
        CyString GetDir() { return m_sDirIO.Dir(); }
        CDirIO &GetDirIO() { return m_sDirIO; }

        bool NoFile () { return m_sFilename.Empty(); }
        size_t GetFilesize () { return m_lSize; }

        char *ReadToData ( size_t *size );
        bool WriteData ( const char *data, size_t size );
        bool WriteString ( CyString data );

        bool WritePartFile ( size_t *offsets, size_t numOffset );
        int TruncateFile ( size_t offset, size_t datasize );
        bool WipeFile();
        

        bool Exists ();
        bool AppendFile ( CyString filename );
        bool AppendData ( const char *d, size_t size );
        bool AppendDataToPos ( const char *d, size_t size, size_t start );

        bool CheckFileExtension(CyString ext) { return (GetFileExtension().Compare(ext)) ? true : false; }
        CyString GetFileExtension ();
        CyString ChangeFileExtension ( CyString ext );
        CyString GetWindowsFilename();

        void SetDir ( CyString dir );

private:
        CyString m_sFilename;
        CyString m_sFile;
        CDirIO   m_sDirIO;

        bool m_bOpened;
        bool m_bBinary;

        std::ifstream m_fId;
        FILE *m_fIdOld;

        size_t m_lSize;
};

#endif //__FILE_IO_H__