TNB Library
TnbTextFile.h
[詳解]
1#pragma once
13#include "TnbFile.h"
14#include "TnbConstStrVector.h"
15#include "TnbStrAdder.h"
16#include "TnbStrVector.h"
17
18
19
20//TNB Library
21namespace TNB
22{
23
24
25
42{
43public:
44
46 CTextFileWriter(void) : m_pWriter(&m_fw), m_isUnicode(false)
47 {
48 }
49
56 bool CanWrite(void) const
57 {
58 m_pWriter->CanWrite();
59 }
60
65 void Close(void)
66 {
67 m_pWriter->Close();
68 m_pWriter = &m_fw;
69 }
70
79 bool New(LPCTSTR lpszName, bool isUnicode = false)
80 {
81 Close();
82 bool r = m_fw.New(lpszName);
83 if ( r )
84 {
85 r = m_Open(&m_fw, isUnicode);
86 }
87 return r;
88 }
89
98 bool Open(IWriter* pWriter, bool isUnicode = false)
99 {
100 Close();
101 return m_Open(pWriter, isUnicode);
102 }
103
110 void WriteLine(LPCSTR lpszLine)
111 {
112 CAscii s = lpszLine;
113 s += "\r\n";
114 m_Write(s);
115 }
116
123 void WriteLine(LPCWSTR lpszLine)
124 {
125 CUnicode s = lpszLine;
126 s += L"\r\n";
127 m_Write(s);
128 }
129
137 void WriteFormat(LPCSTR lpszFormat, ...)
138 {
139 CAscii s;
140 va_list va;
141 va_start(va, lpszFormat);
142 s.FormatV(lpszFormat, va);
143 va_end(va);
144 m_Write(s);
145 }
146
154 void WriteFormat(LPCWSTR lpszFormat, ...)
155 {
156 CUnicode s;
157 va_list va;
158 va_start(va, lpszFormat);
159 s.FormatV(lpszFormat, va);
160 va_end(va);
161 m_Write(s);
162 }
163
170 void Write(const CStrVector& vs)
171 {
172 CStr s;
173 loop ( i, vs )
174 {
175 s = vs[i];
176 s += _T("\r\n");
177 m_Write(s);
178 }
179 }
180
191 static bool NewFile(LPCTSTR lpszName, const CStrVector& vs, bool isUnicode = false)
192 {
194 if ( w.New(lpszName, isUnicode) )
195 {
196 try
197 {
198 w.Write(vs);
199 return true;
200 }
201 catch ( ... )
202 {
203 }
204 }
205 return false;
206 }
207
208private:
217 bool m_Open(IWriter* pWriter, bool isUnicode = false)
218 {
219 if ( pWriter->CanWrite() && pWriter->GetSize() == 0 )
220 {
221 m_isUnicode = isUnicode;
222 if ( ! m_isUnicode )
223 {
224 return true;
225 }
226 else
227 {
228 const BYTE buf[2] = { 0xFF, 0xFE };
229 try
230 {
231 pWriter->Write(2, buf);
232 m_pWriter = pWriter;
233 return true;
234 }
235 catch ( ... )
236 {
237 }
238 }
239 }
240 return false;
241 }
242 // 書込み(ASCII文字列指定)
243 void m_Write(const CStrT<char>& str)
244 {
245 if ( m_isUnicode )
246 {
247 CUnicode uni = str;
248 m_pWriter->Write(uni.GetLength() * 2, uni.operator LPCWSTR());
249 }
250 else
251 {
252 m_pWriter->Write(str.GetLength(), str.operator LPCSTR());
253 }
254 }
255 // 書込み(UNICODE文字列指定)
256 void m_Write(const CStrT<WCHAR>& str)
257 {
258 if ( m_isUnicode )
259 {
260 m_pWriter->Write(str.GetLength() * 2, str.operator LPCWSTR());
261 }
262 else
263 {
264 CAscii asc = str;
265 m_pWriter->Write(asc.GetLength(), asc.operator LPCSTR());
266 }
267 }
268 bool m_isUnicode;
269 IWriter* m_pWriter;
270 CFileWriter m_fw;
271};
272
273
274
288{
289public:
290
292 CTextFileReader(void) : m_hasUnicode(false)
293 {
294 }
295
301 bool HasContents(void) const
302 {
303 return ! m_contents.IsEmpty();
304 }
305
311 bool hasUnicodeContents(void) const
312 {
313 return HasContents() && m_hasUnicode;
314 }
315
319 void Empty(void)
320 {
321 m_contents.RemoveAll();
322 }
323
331 bool Read(LPCTSTR lpszFileName)
332 {
333 Empty();
334 CFileReader fr;
335 if ( fr.Open(lpszFileName) )
336 {
337 return Read(&fr);
338 }
339 return false;
340 }
341
349 bool Read(IReader* pReader)
350 {
351 Empty();
352 if ( pReader->CanRead() )
353 {
354 try
355 {
356 m_contents = pReader->ReadInto();
357 m_contents.Add(0);
358 m_contents.Add(0);
359 m_hasUnicode = (m_contents[0] == 0xFF && m_contents[1] == 0xFE);
360 return true;
361 }
362 catch ( ... )
363 {
364 }
365 }
366 return false;
367 }
368
377 {
378 if ( HasContents() )
379 {
380 if ( ! m_hasUnicode )
381 {
382 _vs.SetClone(reinterpret_cast<LPCSTR>(m_contents.ReferBuffer()));
383 }
384 else
385 {
386 LPCWSTR lpsz = reinterpret_cast<LPCWSTR>(m_contents.ReferBuffer());
387 CAscii a = reinterpret_cast<LPCSTR>(&lpsz[1]);
388 _vs.SetClone(a);
389 }
390 return true;
391 }
392 return false;
393 }
394
403 {
404 if ( HasContents() )
405 {
406 if ( ! m_hasUnicode )
407 {
408 CUnicode a = reinterpret_cast<LPCSTR>(m_contents.ReferBuffer());
409 _vs.SetClone(a);
410 }
411 else
412 {
413 LPCWSTR lpsz = reinterpret_cast<LPCWSTR>(m_contents.ReferBuffer());
414 _vs.SetClone(&lpsz[1]);
415 }
416 return true;
417 }
418 return false;
419 }
420
421private:
422 CByteVector m_contents;
423 bool m_hasUnicode;
424};
425
426
427
428}; // TNB
文字列情報配列管理関係のヘッダ
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
ファイル関係のヘッダ
文字列連結関係のヘッダ
文字列情報配列管理関係のヘッダ
不変的文字列情報配列管理クラス.
size_t SetClone(const TYP *lpszText)
[設定] データ設定.
[ETC] コピー不可能スーパークラス.
Definition: TnbDef.h:599
ファイル読み込みクラス
Definition: TnbFile.h:338
bool Open(LPCTSTR lpszName, bool boIsShare=true, bool boDummy=false)
[操作] オープン
Definition: TnbFile.h:364
ファイル書き込みクラス
Definition: TnbFile.h:475
bool New(LPCTSTR lpszName, bool boIsShare=true)
[操作] 新規オープン.
Definition: TnbFile.h:501
void FormatV(const TYP *lpszFormat, va_list V)
[代入] 書式付き文字列代入.
Definition: TnbStr.h:349
size_t GetLength(void) const
[取得] 文字列長
Definition: TnbStr.h:518
テキストファイル読込みクラス
Definition: TnbTextFile.h:288
CTextFileReader(void)
コンストラクタ
Definition: TnbTextFile.h:292
bool Read(LPCTSTR lpszFileName)
[読込] ファイル読み込み.
Definition: TnbTextFile.h:331
bool GetContents(CConstStrVectorT< WCHAR > &_vs) const
[取得] 内容取得.
Definition: TnbTextFile.h:402
bool GetContents(CConstStrVectorT< char > &_vs) const
[取得] 内容取得.
Definition: TnbTextFile.h:376
bool Read(IReader *pReader)
[読込] ファイル読み込み.
Definition: TnbTextFile.h:349
bool HasContents(void) const
[確認] 内容あり?
Definition: TnbTextFile.h:301
void Empty(void)
[設定] 空っぽ化.
Definition: TnbTextFile.h:319
bool hasUnicodeContents(void) const
[確認] UNICODE内容あり?
Definition: TnbTextFile.h:311
テキストファイル書込みクラス
Definition: TnbTextFile.h:42
void WriteLine(LPCWSTR lpszLine)
[書込] 一行書き込み.
Definition: TnbTextFile.h:123
CTextFileWriter(void)
コンストラクタ
Definition: TnbTextFile.h:46
void WriteFormat(LPCWSTR lpszFormat,...)
[書込] 書式書き込み.
Definition: TnbTextFile.h:154
static bool NewFile(LPCTSTR lpszName, const CStrVector &vs, bool isUnicode=false)
[作成] 新規ファイル作成.
Definition: TnbTextFile.h:191
void Write(const CStrVector &vs)
[書込] 書き込み.
Definition: TnbTextFile.h:170
void WriteLine(LPCSTR lpszLine)
[書込] 一行書き込み.
Definition: TnbTextFile.h:110
void Close(void)
[処理] クローズ.
Definition: TnbTextFile.h:65
bool New(LPCTSTR lpszName, bool isUnicode=false)
[作成] 新規ファイル作成.
Definition: TnbTextFile.h:79
bool CanWrite(void) const
[確認] 書込み可能?.
Definition: TnbTextFile.h:56
void WriteFormat(LPCSTR lpszFormat,...)
[書込] 書式書き込み.
Definition: TnbTextFile.h:137
bool Open(IWriter *pWriter, bool isUnicode=false)
[作成] 新規ファイル作成.
Definition: TnbTextFile.h:98
virtual bool RemoveAll(void)
[削除] 空化
Definition: TnbVector.h:565
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
Definition: TnbVector.h:664
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
Definition: TnbVector.h:383
TNB Library
Definition: TnbDoxyTitle.txt:2
bool IsEmpty(void) const
[確認] 要素の有無確認.
読み込みインターフェース
Definition: TnbReader.h:36
CByteVector ReadInto(size_t size=0) const
[取得] 読み込み
Definition: TnbReader.h:150
virtual void Close(void)=0
[操作] クローズ
virtual LONGLONG GetSize(void) const =0
[取得] サイズ取得
virtual bool CanRead(void) const =0
[確認] 読み込み可能か
書き込みインターフェース
Definition: TnbWriter.h:36
virtual bool CanWrite(void) const =0
[確認] 書込み可能か
virtual void Write(size_t size, LPCVOID P)=0
[保存] 書き込み