Rev 123 | Rev 160 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | RSS feed
#ifndef __FILE_IO_H__
#define __FILE_IO_H__
#pragma warning( push )
#pragma warning( disable : 4251)
#include "CyString.h"
#include "StringList.h"
#include "Utils/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:
static bool Remove(const Utils::String &filename);
static bool Exists(const Utils::String &filename);
public:
CFileIO();
CFileIO(const Utils::String &sFilename, bool bBinary);
CFileIO(CyString filename);
CFileIO(C_File *file);
~CFileIO ();
bool startWrite();
bool startRead();
bool startModify();
bool startAppend();
bool atEnd() const;
size_t fileSize() const;
time_t modifiedTime();
time_t GetCreationTime();
void SetCreationTime(time_t time);
bool writeSize(size_t iSize);
bool write(CFileIO &file, size_t iSize);
bool write(const unsigned char *buf, ...);
bool write(const char *buf, ...);
bool write(const char *buf, size_t iSize);
bool write(const unsigned char *buf, size_t iSize);
bool put(const unsigned char c);
void close();
Utils::String readEndOfLine();
void seek(size_t iPos);
void seekEnd(size_t iPos = 0);
void seekStart(size_t iPos = 0);
size_t position();
int readSize();
bool read(unsigned char *buf, size_t iSize, bool bEndChar = false);
unsigned char *read(size_t iAmount);
unsigned char *readAll(size_t *pSize = NULL);
std::fstream &stream();
std::vector<Utils::String> *readLines();
std::vector<CyString> *ReadLines();
CyStringList *ReadLinesStr();
Utils::CStringList *readLinesStr();
bool WriteFile(std::vector<CyString> *lines);
bool WriteFileUTF(std::vector<CyString> *lines);
bool WriteFile(CyStringList *lines);
bool writeFile(std::vector<Utils::String> *lines);
bool writeFileUTF(std::vector<Utils::String> *lines);
bool writeFile(Utils::CStringList *lines);
bool remove();
bool Rename(CyString toFile);
bool copy(const Utils::String &toFile, bool keepTime = false);
bool isOpened() const;
//bool Open ( CyString filename, bool = true );
bool open(const Utils::String &sFilename, bool bBinary = true);
Utils::String baseName() const;
const Utils::String &fullFilename() const { return m_sFilename; }
const Utils::String &filename() const { return m_sFile; }
const Utils::String &dir() const { return m_sDirIO.dir(); }
CyString GetFilename () { return m_sFile; }
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 ( const Utils::String &data );
bool WritePartFile ( size_t *offsets, size_t numOffset );
int TruncateFile ( size_t offset, size_t datasize );
bool WipeFile();
bool exists() const;
bool ExistsOld () const;
bool AppendFile ( CyString filename );
bool appendFile ( const Utils::String &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; }
bool isFileExtension(const Utils::String &ext) { return (extension().Compare(ext)) ? true : false; }
Utils::String extension();
CyString GetFileExtension ();
CyString ChangeFileExtension(CyString ext) const;
CyString GetWindowsFilename();
Utils::String changeFileExtension(const Utils::String &ext) const;
void setDir(const Utils::String &dir);
void SetDir ( CyString dir );
void setAutoDelete(bool bDelete);
private:
int _in() const;
int _out() const;
int _append() const;
int _inout() const;
bool _start(int iFlags, bool bSeekP);
void _readFileSize ();
void _seek(int iPos, int iFrom);
bool _write(const char *buf, va_list args);
private:
Utils::String m_sFilename;
Utils::String m_sFile;
CDirIO m_sDirIO;
bool m_bSeekP;
bool m_bBinary;
bool m_bAutoDelete;
std::fstream m_fId;
size_t m_lSize;
};
#pragma warning( pop )
#endif //__FILE_IO_H__