Subversion Repositories spk

Rev

Rev 185 | Rev 197 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 cycrow 1
#ifndef __FILE_IO_H__
2
#define __FILE_IO_H__
3
 
121 cycrow 4
#pragma warning( push )
5
#pragma warning( disable : 4251)
6
 
196 cycrow 7
#include "Utils/WStringList.h"
111 cycrow 8
#include "Utils/StringList.h"
1 cycrow 9
#include <fstream>
10
#include <vector>
11
#include "DirIO.h"
12
 
13
#include <time.h>
14
 
15
#if defined(_WIN32) || defined(OS2) || defined(MSDOS)
16
#include <fcntl.h>
17
#include <io.h>
18
#define MY_SET_BINARY_MODE(file) setmode(fileno(file),O_BINARY)
19
#else
20
#define MY_SET_BINARY_MODE(file)
21
#endif
22
 
23
#define EPOCH_DIFF 0x019DB1DED53E8000LL /* 116444736000000000 nsecs */
24
#define RATE_DIFF 10000000 /* 100 nsecs */
25
 
26
class C_File;
27
 
28
enum {FILEERR_NONE, FILEERR_NOFILE, FILEERR_NOOPEN, FILEERR_TOSMALL, FILEERR_NOWRITE};
29
 
30
class SPKEXPORT CFileIO
31
{
32
public:
196 cycrow 33
	static bool Remove(const Utils::WString &filename);
34
	static bool Exists(const Utils::WString &filename);
52 cycrow 35
 
36
public:
37
	CFileIO();
196 cycrow 38
	CFileIO(const Utils::WString &sFilename, bool bBinary);
39
	CFileIO(const Utils::WString &filename);
52 cycrow 40
	CFileIO(C_File *file);
1 cycrow 41
	~CFileIO ();
42
 
52 cycrow 43
	bool startWrite();
44
	bool startRead();
45
	bool startModify();
46
	bool startAppend();
56 cycrow 47
	bool atEnd() const;
1 cycrow 48
 
52 cycrow 49
	size_t fileSize() const;
50
 
160 cycrow 51
	time_t modifiedTime() const;
52
	time_t creationTime() const;
53
	void setCreationTime(time_t time);
1 cycrow 54
 
123 cycrow 55
	bool writeSize(size_t iSize);
52 cycrow 56
	bool write(CFileIO &file, size_t iSize);
57
	bool write(const unsigned char *buf, ...);
58
	bool write(const char *buf, ...);
123 cycrow 59
	bool write(const char *buf, size_t iSize);
60
	bool write(const unsigned char *buf, size_t iSize);
52 cycrow 61
	bool put(const unsigned char c);
62
 
63
	void close();
64
 
65
	Utils::String readEndOfLine();
66
 
123 cycrow 67
	void seek(size_t iPos);
68
	void seekEnd(size_t iPos = 0);
69
	void seekStart(size_t iPos = 0);
58 cycrow 70
	size_t position();
52 cycrow 71
 
56 cycrow 72
	int readSize();
52 cycrow 73
	bool read(unsigned char *buf, size_t iSize, bool bEndChar = false);
74
	unsigned char *read(size_t iAmount);
75
	unsigned char *readAll(size_t *pSize = NULL);
76
 
77
	std::fstream &stream();
78
 
166 cycrow 79
	std::vector<Utils::String>* readLines() const;
170 cycrow 80
	size_t readLines(std::vector<Utils::String>& to) const;
81
	size_t readLines(Utils::CStringList& to) const;
111 cycrow 82
	Utils::CStringList *readLinesStr();
83
 
121 cycrow 84
	bool writeFile(std::vector<Utils::String> *lines);
85
	bool writeFileUTF(std::vector<Utils::String> *lines);
196 cycrow 86
	bool writeFile(Utils::CStringList* lines);
87
	bool writeFile(Utils::WStringList* lines);
1 cycrow 88
 
52 cycrow 89
	bool remove();
196 cycrow 90
	bool Rename(const Utils::WString &toFile);
91
	bool copy(const Utils::WString &toFile, bool keepTime = false);
1 cycrow 92
 
52 cycrow 93
	bool isOpened() const;
196 cycrow 94
	bool open(const Utils::WString& sFilename, bool bBinary = true);
1 cycrow 95
 
196 cycrow 96
	Utils::WString baseName() const;
97
	const Utils::WString& fullFilename() const;
98
	const Utils::WString& filename() const;
99
	const Utils::WString& dir() const { return _sDirIO.dir(); }
100
 
101
	//TODO: remove these
102
	const Utils::String fullFilenameStr() const;
103
	const Utils::String filenameStr() const;
104
	const Utils::String dirStr() const { return _sDirIO.dir().toString(); }
160 cycrow 105
	CDirIO &GetDirIO() { return _sDirIO; }
1 cycrow 106
 
160 cycrow 107
	bool NoFile () { return _sFilename.empty(); }
1 cycrow 108
	size_t GetFilesize () { return m_lSize; }
109
 
110
	char *ReadToData ( size_t *size );
111
	bool WriteData ( const char *data, size_t size );
82 cycrow 112
	bool writeString ( const Utils::String &data );
1 cycrow 113
 
114
	bool WritePartFile ( size_t *offsets, size_t numOffset );
115
	int TruncateFile ( size_t offset, size_t datasize );
116
	bool WipeFile();
117
 
52 cycrow 118
	bool exists() const;
119
	bool ExistsOld () const;
82 cycrow 120
	bool appendFile ( const Utils::String &filename );
1 cycrow 121
	bool AppendData ( const char *d, size_t size );
122
	bool AppendDataToPos ( const char *d, size_t size, size_t start );
123
 
196 cycrow 124
	bool isFileExtension(const Utils::WString &ext) { return (extension().Compare(ext)) ? true : false; }
119 cycrow 125
 
196 cycrow 126
	Utils::WString extension() const;
127
	Utils::WString getWindowsFilename() const;
128
	Utils::WString changeFileExtension(const Utils::WString &ext) const;
1 cycrow 129
 
196 cycrow 130
	void setDir(const Utils::WString &dir);
52 cycrow 131
	void setAutoDelete(bool bDelete);
1 cycrow 132
 
133
private:
52 cycrow 134
	int _in() const;
135
	int _out() const;
136
	int _append() const;
137
	int _inout() const;
138
	bool _start(int iFlags, bool bSeekP);
51 cycrow 139
 
140
	void _readFileSize ();
52 cycrow 141
	void _seek(int iPos, int iFrom);
51 cycrow 142
 
52 cycrow 143
	bool _write(const char *buf, va_list args);
144
 
160 cycrow 145
	void _updateFilename();
146
 
196 cycrow 147
	const char* _fileData() const;
148
	static const char* _toFileData(const Utils::WString &str);
149
 
51 cycrow 150
private:
196 cycrow 151
	Utils::WString	_sFilename;
152
	Utils::WString	_sFile;
153
	Utils::WString	_sExt;
160 cycrow 154
	CDirIO			_sDirIO;
1 cycrow 155
 
52 cycrow 156
	bool m_bSeekP;
1 cycrow 157
	bool m_bBinary;
52 cycrow 158
	bool m_bAutoDelete;
1 cycrow 159
 
52 cycrow 160
	std::fstream m_fId;
1 cycrow 161
 
162
	size_t m_lSize;
163
};
164
 
121 cycrow 165
#pragma warning( pop ) 
1 cycrow 166
#endif //__FILE_IO_H__
167