头文件
1
#pragma once
2
//#include <eh.h>
3
#include <windows.h>
4
#include <string>
5
#include <stdio.h>
6
#include <time.h>
7
using namespace std;
8
9
namespace HongYing
10
{
11
12
namespace IO
13
{
14
15
class FileStream
16
{
17
public:
18
FileStream(void);
19
FileStream(const char * filePath);
20
void Open(const char * filePath,int mode);
21
void Close(void);
22
char Putc(char c); //写入一个字符到流中。
23
char Getc();//从流中读入一个字符。
24
void Seek(long offset,int seek_origin);//定位到流中指定的位置以字节为单位,成功返回 0
25
char * Gets(char * buffer,int maxCount) ; //从流中读一行或指定个字符 失败返回NULL
26
void Puts(char * buffer) ;//写一个行字符串到流中;
27
int End();
28
int Error();
29
void Rewind();//其实本函数相当于fseek(fp,0L,SEEK_SET);
30
int Read(void *buffer,size_t size,size_t count);//从流中读指定块数的字符,反回实际读入的块数 size 为块的大小,count 要读的块数
31
int Write(void *buffer,size_t size,size_t count);//向流中写指定的数据
32
FILE * GetFilePtr(void);
33
public:
34
~FileStream(void);
35
private:
36
// 文件指针
37
FILE *file;
38
};
39
class File
40
{
41
public:
42
File(void);
43
static FileStream Open(const char * filePath,int mode);
44
static FileStream Create(const char * filePath);
45
static int Delete(const char *filePath);
46
static FileStream CreateTempFile();
47
public:
48
~File(void);
49
};
50
51
class OpenFileMode
52
{
53
public:
54
OpenFileMode(void);
55
public:
56
~OpenFileMode(void);
57
public:
58
// 打开一个用于读取的文本文件
59
static const int TxtOpenRead = 0;
60
//创建一个用于写入的文本文件
61
static const int TxtCreateWrite = 1;
62
//附加到一个文本文件
63
static const int TxtAppend = 2;
64
//打开一个用于读/写的文本文件
65
static const int TxtOpenReadOrWrite = 3;
66
//创建一个用于读/写的文本文件
67
static const int TxtCreateReadOrWrite = 4;
68
//打开一个用于读/写的文本文件
69
static const int TxtOpenAppendReadOrWrite=5;
70
//打开一个用于读取的二进制文件
71
static const int BitOpenRead = 6;
72
//创建一个用于写入的二进制文件
73
static const int BitCreateWrite = 7;
74
//附加到一个二进制文件
75
static const int BitAppend = 8;
76
//打开一个用于读/写的二进制文件
77
static const int BitOpenReadOrWrite = 9;
78
//创建一个用于读/写的二进制文件
79
static const int BitCreateReadOrWrite = 10;
80
//打开一个用于读/写的二进制文件
81
static const int BitOpenAppendReadOrWrite =11;
82
//得到打开文件mode的字符串
83
static const char * GetModeStr(int mode);
84
85
};
86
87
class Exception
88
{
89
public:
90
Exception();
91
Exception(char *msg,DWORD errorNo, char *file,char *function,int l);
92
DWORD ErrorNo;//错误号
93
char Message[MAX_PATH];//错误信息
94
char FilePath[MAX_PATH];//错误文件路径
95
char Fun[MAX_PATH];//错误函数名
96
EXCEPTION_POINTERS PException_poists;
97
INT line;
98
public:
99
static void Trans_func( unsigned int u, EXCEPTION_POINTERS *pExp );
100
static void Init();//初始化异常
101
string ToString();
102
public:
103
~Exception();
104
105
106
};
107
#define THROW_EX(Msg,errorNo) throw Exception(Msg,errorNo,__FILE__,__FUNCTION__,__LINE__);
108
}
109
namespace Object
110
{
111
class Object
112
{
113
public:
114
Object(void);
115
virtual bool Equals(const Object *object) = 0;
116
virtual int CompareTo(const Object *value) = 0;
117
virtual std::string ToString() = 0 ;
118
119
public:
120
~Object(void);
121
};
122
123
class DateTime :public Object
124
{
125
public:
126
DateTime(time_t seconds);
127
DateTime(int year,int month,int day);
128
DateTime(int year,int month,int day,int hour,int minute,int second);
129
DateTime(std::string datetimeStr);//日期字符串格式 年/月/日 时:分:秒 例:2008/02/03 9:30:20 出错返回 01/01/1970 00:00:00
130
DateTime(std::string datetimeStr,std::string formaterStr);
131
private:
132
time_t seconds;//自1970起的秒数
133
tm date;
134
public:
135
void AddYears(const time_t years); //将指定的年份数加到此实例的值上。
136
void AddMonths(const time_t Months);//将指定的月份数加到此实例的值上。
137
void AddDays(const time_t days); //将指定的天数加到此实例的值上。
138
void AddHours(const time_t hours);//将指定的小时数加到此实例的值上。
139
void AddMinutes(const time_t minutes);//将指定的分钟数加到此实例的值上。
140
void AddSeconds(const time_t seconds); //将指定的秒数加到此实例的值上。
141
void AddWeeks(const time_t weeks);//将指定的周数加到些实上的值上。
142
static int Compare(const DateTime *value1,const DateTime *value2);//对两个 DateTime 的实例进行比较,并返回一个指示第一个实例是早于、等于还是晚于第二个实例的整数。 返回值:小于零 value1 小于 value2。 零 value1 等于 value2。 大于零 value1 大于 value2。
143
int CompareTo(const Object *value);//已重载。 将此实例的值与指定的 DateTime 值相比较,并指示此实例是早于、等于还是晚于指定的 DateTime 值。
144
int CompareTo(const DateTime *value);//小于零 此实例小于 value。 零 此实例等于 value。 大于零 此实例大于 value。
145
146
147
int DaysInMonth(const int year,const int months);//返回指定年和月中的天数。
148
bool Equals(const Object *object);
149
bool Equals(const DateTime *dateTime);
150
static bool Equals(const DateTime *value1,const DateTime *value2);
151
static DateTime Parse(std::string datetimeStr);//日期字符串格式 月/日/年 时:分:秒 例:02/03/2008 9:30:20 出错返回 01/01/1970 00:00:00
152
static DateTime Parse(std::string dateTimeStr,std::string formaterStr);
153
std::string ToShortDateString();//将当前 DateTime 对象的值转换为其等效的短日期字符串表示形式。
154
std::string ToString();
155
std::string ToString(const std::string formaterStr);//formaterStr = "%Y-%m-%d %H:%M:%S" %Y=年 %m=月 %d=日 %H=时 %M=分 %S=秒
156
public:
157
int GetYear();//获取此实例所表示日期的年份部分。
158
int GetMonth();//获取此实例所表示日期的年份部分。
159
int GetDay();// 获取此实例所表示的日期为该月中的第几天。
160
int GetHour();//获取此实例所表示日期的小时部分。
161
int GetMinute();//获取此实例所表示日期的分钟部分
162
int GetSecond();//获取此实例所表示日期的秒部分。
163
int DayOfWeek(); //获取此实例所表示的日期是星期几。
164
int DayOfYear();//记录今天是一年里面的第几天,从1月1日起,0-365
165
static DateTime GetNow(); //返回当前日期是间
166
public:
167
bool operator == (DateTime &dateTime);
168
bool operator > (DateTime &dateTime);
169
bool operator < (DateTime &DateTime);
170
bool operator >= (DateTime &DateTime);
171
bool operator <= (DateTime &DateTime);
172
bool operator != (DateTime &DateTime);
173
174
private:
175
void InitByStr(std::string dateTimeStr,std::string formaterStr);
176
public:
177
~DateTime(void);
178
};
179
180
181
182
183
}
184
}
185

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

CPP文件
1
#include "StdAfx.h"
2
#include "HongYing.h"
3
namespace HongYing
4
{
5
namespace Object
6
{
7
DateTime::DateTime(const time_t seconds)
8
{
9
this->seconds = seconds;
10
this->date = *localtime(&this->seconds);
11
}
12
DateTime::DateTime(int year,int month,int day)
13
{
14
tm t;
15
t.tm_year = year-1900;
16
t.tm_mon = month-1;
17
t.tm_mday = day;
18
t.tm_hour = 0;
19
t.tm_min = 0;
20
t.tm_sec = 0;
21
this->seconds = mktime(&t);
22
this->date = *localtime(&this->seconds);
23
24
}
25
DateTime::DateTime(int year,int month,int day,int hour,int minute,int second)
26
{
27
tm t;
28
t.tm_year = year-1900;
29
t.tm_mon = month-1;
30
t.tm_mday = day;
31
t.tm_hour = hour;
32
t.tm_min = minute;
33
t.tm_sec = second;
34
this->seconds = mktime(&t);
35
this->date = *localtime(&this->seconds);
36
37
}
38
39
DateTime::DateTime(std::string datetimeStr) //日期字符串格式 月/日/年 时:分:秒 例:02/03/2008 9:30:20 出错返回 01/01/1970 00:00:00
40
{
41
this->InitByStr(datetimeStr,"%d/%d/%d %d:%d:%d");
42
}
43
DateTime::DateTime(std::string datetimeStr,std::string formaterStr)
44
{
45
this->InitByStr(datetimeStr,formaterStr);
46
}
47
DateTime DateTime::Parse(std::string datetimeStr)
48
{
49
50
DateTime datetime(datetimeStr);
51
return datetime;
52
}
53
DateTime DateTime::Parse(const std::string datetimeStr,const std::string formaterStr)
54
{
55
DateTime datetime(datetimeStr,formaterStr);
56
return datetime;
57
}
58
59
60
void DateTime::InitByStr(std::string dateTimeStr,std::string formaterStr)
61
{
62
int year,month,day,hour,minutes,seconds;
63
sscanf(dateTimeStr.c_str(),formaterStr.c_str(),&year,&month,&day,&hour,&minutes,&seconds);
64
if(year <1900) year = 1970;
65
if(month <0) month = 1;
66
if(day <0) day = 1;
67
if(hour <0) hour = 0;
68
if(minutes <0) minutes = 0;
69
if(seconds <0) seconds = 0;
70
tm t;
71
t.tm_year = year-1900;
72
t.tm_mon = month-1;
73
t.tm_mday = day;
74
t.tm_hour = hour;
75
t.tm_min = minutes;
76
t.tm_sec = seconds;
77
this->seconds = mktime(&t);
78
this->date = *localtime(&this->seconds);
79
}
80
int DateTime::DayOfWeek()
81
{
82
return this->date.tm_wday;
83
}
84
int DateTime::DayOfYear()
85
{
86
return this->date.tm_yday;
87
}
88
int DateTime::DaysInMonth(const int year,const int months)
89
{
90
return 0;
91
}
92
93
bool DateTime::Equals(const Object *object)
94
{
95
DateTime *dateTime = (DateTime *)object;
96
if(this->seconds == dateTime->seconds)
97
return true;
98
return false;
99
}
100
101
bool DateTime::Equals(const DateTime *dateTime)
102
{
103
return this->Equals((Object *)dateTime);
104
}
105
106
bool DateTime::Equals(const DateTime *value1,const DateTime *value2)
107
{
108
if(value1->seconds == value2->seconds)
109
return true;
110
return false;
111
}
112
int DateTime::GetDay()
113
{
114
return this->date.tm_mday;;
115
}
116
117
int DateTime::GetHour()
118
{
119
return this->date.tm_hour;
120
}
121
int DateTime::GetMinute()
122
{
123
return this->date.tm_min;
124
}
125
int DateTime::GetMonth()
126
{
127
return this->date.tm_mon;
128
}
129
130
DateTime DateTime::GetNow()
131
{
132
DateTime datetime(time(0));
133
return datetime;
134
}
135
136
int DateTime::GetSecond()
137
{
138
return this->date.tm_sec;
139
}
140
141
int DateTime::GetYear()
142
{
143
return this->date.tm_year+1900;
144
}
145
146
void DateTime::AddYears(const time_t years)
147
{
148
this->date.tm_year = this->date.tm_year+years;
149
this->seconds = mktime(&this->date);
150
}
151
void DateTime::AddMonths(const time_t months)
152
{
153
int a =(int)((this->date.tm_mon+months)/12);
154
155
this->date.tm_year = this->date.tm_year+a;
156
this->date.tm_mon = this->date.tm_mon+(int)((this->date.tm_mon+months)%12)-1;
157
this->seconds = mktime(&this->date);
158
}
159
160
void DateTime::AddDays(const time_t days)
161
{
162
this->AddHours(days*24);
163
}
164
void DateTime::AddHours(const time_t hours)
165
{
166
this->AddMinutes(hours*60);
167
}
168
void DateTime::AddMinutes(const time_t minutes)
169
{
170
this->AddSeconds(minutes *60);
171
}
172
173
void DateTime::AddSeconds(const time_t seconds)
174
{
175
this->seconds = this->seconds+seconds;
176
this->date = *localtime(&this->seconds);
177
}
178
void DateTime::AddWeeks(const time_t weeks)
179
{
180
this->AddDays(weeks*7);
181
}
182
183
184
int DateTime::Compare(const DateTime *t1,const DateTime *t2)
185
{
186
if( t1->seconds == t2->seconds)
187
return 0;
188
if(t1->seconds < t2->seconds)
189
return -1;
190
return 1;
191
192
}
193
194
195
int DateTime::CompareTo(const Object *value)
196
{
197
DateTime * dateTime = (DateTime *)value;
198
if( dateTime->seconds == this->seconds)
199
return 0;
200
if(this->seconds < dateTime->seconds)
201
return -1;
202
return 1;
203
}
204
205
int DateTime::CompareTo(const DateTime *value)
206
{
207
if(this->seconds == value->seconds)
208
return 0;
209
if(this->seconds <value->seconds)
210
return -1;
211
return 1;
212
}
213
214
215
std::string DateTime::ToShortDateString()
216
{
217
return this->ToString("%Y-%m-%d");
218
}
219
220
std::string DateTime::ToString()
221
{
222
return this->ToString("%Y-%m-%d %H:%M:%S");
223
}
224
std::string DateTime::ToString(const std::string formaterStr)
225
{
226
//strftime(s, sizeof(s), "%Y-%m-%d %H:%M:%S", localtime(&t));
227
char s[256];
228
strftime(s, sizeof(s), formaterStr.c_str(), &this->date);
229
std::string str(s);
230
return str;
231
232
}
233
234
bool DateTime::operator ==( DateTime &dateTime)
235
{
236
return this->Equals(&dateTime);
237
238
}
239
bool DateTime::operator != (DateTime &datetime)
240
{
241
if(this->seconds != datetime.seconds)
242
return true;
243
return false;
244
}
245
bool DateTime::operator > (DateTime &dateTime)
246
{
247
if(this->seconds > dateTime.seconds)
248
return true;
249
return false;
250
}
251
bool DateTime::operator < (DateTime &datetime)
252
{
253
if(this->seconds <datetime.seconds)
254
return true;
255
return false;
256
}
257
bool DateTime::operator >=(DateTime &datetime)
258
{
259
if(this->seconds >= datetime.seconds)
260
return true;
261
return false;
262
}
263
264
bool DateTime::operator <=(DateTime &datetime)
265
{
266
if(this->seconds <= datetime.seconds)
267
return true;
268
return false;
269
}
270
271
DateTime::~DateTime(void)
272
{
273
274
}
275
276
}
277
278
}
279

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161

162

163

164

165

166

167

168

169

170

171

172

173

174

175

176

177

178

179

180

181

182

183

184

185

186

187

188

189

190

191

192

193

194

195

196

197

198

199

200

201

202

203

204

205

206

207

208

209

210

211

212

213

214

215

216

217

218

219

220

221

222

223

224

225

226

227

228

229

230

231

232

233

234

235

236

237

238

239

240

241

242

243

244

245

246

247

248

249

250

251

252

253

254

255

256

257

258

259

260

261

262

263

264

265

266

267

268

269

270

271

272

273

274

275

276

277

278

279
