Solution46
CFile.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// ファイル入出力クラスヘッダファイル
4 ///
5 /// ファイル入出力クラスヘッダファイルです。
6 ///
7 /// $Id: CFile.h 245 2019-03-20 15:03:41Z admin $
8 /// $Date: 2019-03-21 00:03:41 +0900 (2019/03/21 (木)) $
9 /// $Author: admin $
10 ///
11 /// @attention なし
12 
13 #pragma once
14 #pragma managed( push, off )
15 
16 //=============================================================================
17 // インクルードファイル
18 #include <LibCommonDef.h>
19 
20 //=============================================================================
21 // マクロ定義
22 #define CP_UTF16 ( 1200 ) ///< UTF-16コードページ
23 
24 //=============================================================================
25 // 共通ライブラリ名前空間
26 namespace LibCommon {
27  //=========================================================================
28  /// ファイル入出力クラス
29  ///
30  /// ファイル入出力クラスです。
31  ///
32  /// @attention なし
33  ///
35  //=====================================================================
36  // 構築子と解体子
37  public:
38  //---------------------------------------------------------------------
39  /// コンストラクタ
40  ///
41  /// コンストラクタです。
42  ///
43  /// @param なし
44  /// @return なし
45  /// @attention なし
46  ///
47  explicit CFile() noexcept;
48 
49  //---------------------------------------------------------------------
50  /// デストラクタ
51  ///
52  /// デストラクタです。
53  ///
54  /// @param なし
55  /// @return なし
56  /// @attention なし
57  ///
58  virtual ~CFile() noexcept;
59 
60  //=====================================================================
61  // インライン公開関数
62  public:
63  //---------------------------------------------------------------------
64  /// ファイルハンドル取得関数
65  ///
66  /// ファイルハンドル取得関数です。
67  ///
68  /// @param なし
69  /// @return ファイルハンドル
70  /// @attention なし
71  ///
72  inline virtual HANDLE GetHandle() const noexcept { return m_hFile; }
73 
74  //=====================================================================
75  // 公開関数
76  public:
77  //---------------------------------------------------------------------
78  /// 作成関数
79  ///
80  /// 作成関数です。
81  ///
82  /// @param[in] pszPath ファイルパス
83  /// @param[in] uCodePage コードページ種別
84  /// @return 実行結果
85  /// - true 成功
86  /// - false 失敗
87  /// @attention なし
88  ///
89  virtual bool Create( wchar_t const* pszPath, UINT uCodePage = CP_UTF16 ) noexcept;
90 
91  //---------------------------------------------------------------------
92  /// オープン関数
93  ///
94  /// オープン関数です。
95  ///
96  /// @param[in] pszPath ファイルパス
97  /// @param[in] bWrite 書き込み許可フラグ
98  /// @return 実行結果
99  /// - true 成功
100  /// - false 失敗
101  /// @attention なし
102  ///
103  virtual bool Open( wchar_t const* pszPath, bool bWrite = false ) noexcept;
104 
105  //---------------------------------------------------------------------
106  /// 追記モードオープン関数
107  ///
108  /// 追記モードオープン関数です。
109  ///
110  /// @param[in] pszPath ファイルパス
111  /// @param[in] uCodePage コードページ種別
112  /// @return 実行結果
113  /// - true 成功
114  /// - false 失敗
115  /// @attention なし
116  ///
117  virtual bool OpenAppend( wchar_t const* pszPath, UINT uCodePage = CP_UTF16 ) noexcept;
118 
119  //---------------------------------------------------------------------
120  /// クローズ関数
121  ///
122  /// クローズ関数です。
123  ///
124  /// @param なし
125  /// @return なし
126  /// @attention なし
127  ///
128  virtual void Close() noexcept;
129 
130  //---------------------------------------------------------------------
131  /// リード関数
132  ///
133  /// リード関数です。
134  ///
135  /// @param[out] pBuffer バッファポインタ
136  /// @param[in] nSize バッファサイズ
137  /// @return リードサイズ
138  /// @attention なし
139  ///
140  virtual LONGLONG Read( void* pBuffer, LONGLONG nSize ) noexcept;
141 
142  //---------------------------------------------------------------------
143  /// ライト関数
144  ///
145  /// ライト関数です。
146  ///
147  /// @param[in] pBuffer バッファポインタ
148  /// @param[in] nSize バッファサイズ
149  /// @return ライトサイズ
150  /// @attention なし
151  ///
152  virtual LONGLONG Write( void const* pBuffer, LONGLONG nSize ) noexcept;
153 
154  //---------------------------------------------------------------------
155  /// ファイルサイズ取得関数
156  ///
157  /// ファイルサイズ取得関数です。
158  ///
159  /// @param なし
160  /// @return ファイルサイズ
161  /// @attention なし
162  ///
163  virtual LONGLONG GetFileSize() const noexcept;
164 
165  //---------------------------------------------------------------------
166  /// ファイルポインタ取得関数
167  ///
168  /// ファイルポインタ取得関数です。
169  ///
170  /// @param なし
171  /// @return ファイルポインタ
172  /// @attention なし
173  ///
174  virtual LONGLONG GetFilePoint() const noexcept;
175 
176  //---------------------------------------------------------------------
177  /// ファイルポインタ設定関数
178  ///
179  /// ファイルポインタ設定関数です。
180  ///
181  /// @param[in] nPoint ファイルポインタ
182  /// @return 実行結果
183  /// - true 成功
184  /// - false 失敗
185  /// @attention なし
186  ///
187  virtual bool SetFilePoint( LONGLONG nPoint ) noexcept;
188 
189  //---------------------------------------------------------------------
190  /// ファイル終端設定関数
191  ///
192  /// ファイル終端設定関数です。
193  ///
194  /// @param なし
195  /// @return 実行結果
196  /// - true 成功
197  /// - false 失敗
198  /// @attention なし
199  ///
200  virtual bool SetFileEnd() noexcept;
201 
202  //---------------------------------------------------------------------
203  /// コードバイトリード関数
204  ///
205  /// コードバイトリード関数です。
206  ///
207  /// @param[in,out] pBuffer バッファポインタ
208  /// @param[in,out] nCount リードカウント参照
209  /// @param[in] nSize リードサイズ
210  /// @return 実行結果
211  /// - true 成功
212  /// - false 失敗
213  /// @attention なし
214  ///
215  virtual bool ReadCodeBytes( unsigned char pBuffer[ MB_LEN_MAX ], int& nCount, int nSize ) noexcept;
216 
217  //---------------------------------------------------------------------
218  /// コードページ入力関数
219  ///
220  /// コードページ入力関数です。
221  ///
222  /// @param[out] ruCodePage コードページ種別参照
223  /// @param[out] rnUtf8 UTF-8コードページ確率参照
224  /// @param[out] rnSJis S-JISコードページ確率参照
225  /// @return 実行結果
226  /// - true 成功
227  /// - false 失敗
228  /// @attention なし
229  ///
230  virtual bool InputCodePage( UINT& ruCodePage, int& rnUtf8, int& rnSJis ) noexcept;
231 
232  //---------------------------------------------------------------------
233  /// BOM出力関数
234  ///
235  /// BOM出力関数です。
236  ///
237  /// @param[in] uCodePage コードページ種別
238  /// @return 実行結果
239  /// - true 成功
240  /// - false 失敗
241  /// @attention なし
242  ///
243  virtual bool OutputBom( UINT uCodePage ) noexcept;
244 
245  //=====================================================================
246  // 静的公開関数
247  public:
248  //---------------------------------------------------------------------
249  /// BOMデータ取得関数
250  ///
251  /// BOMデータ取得関数です。
252  ///
253  /// @param[in] uCodePage コードページ種別
254  /// @param[out] nSize バッファサイズ参照
255  /// @return BOMデータ配列ポインタ
256  /// @attention なし
257  ///
258  static char unsigned const* GetBomData( UINT uCodePage, int& nSize ) noexcept;
259 
260  //---------------------------------------------------------------------
261  /// ASCIIコード判定関数
262  ///
263  /// ASCIIコード判定関数です。
264  ///
265  /// @param[in] ch 文字コード
266  /// @return 実行結果
267  /// - true 成功
268  /// - false 失敗
269  /// @attention なし
270  ///
271  static bool IsAscii( char unsigned ch ) noexcept;
272 
273  //---------------------------------------------------------------------
274  /// S-JIS第1バイト判定関数
275  ///
276  /// S-JIS第1バイト判定関数です。
277  ///
278  /// @param[in] ch 文字コード
279  /// @return 実行結果
280  /// - true 成功
281  /// - false 失敗
282  /// @attention なし
283  ///
284  static bool IsFirstByteSjis( char unsigned ch ) noexcept;
285 
286  //---------------------------------------------------------------------
287  /// S-JIS第2バイト判定関数
288  ///
289  /// S-JIS第2バイト判定関数です。
290  ///
291  /// @param[in] ch 文字コード
292  /// @return 実行結果
293  /// - true 成功
294  /// - false 失敗
295  /// @attention なし
296  ///
297  static bool IsSecondByteSjis( char unsigned ch ) noexcept;
298 
299  //---------------------------------------------------------------------
300  /// S-JIS確定第1バイト判定関数
301  ///
302  /// S-JIS確定第1バイト判定関数です。
303  ///
304  /// @param[in] ch 文字コード
305  /// @return 実行結果
306  /// - true 成功
307  /// - false 失敗
308  /// @attention なし
309  ///
310  static bool IsConfirmedFirstByteSjis( char unsigned ch ) noexcept;
311 
312  //---------------------------------------------------------------------
313  /// S-JIS半角カナ判定関数
314  ///
315  /// S-JIS半角カナ判定関数です。
316  ///
317  /// @param[in] ch 文字コード
318  /// @return 実行結果
319  /// - true 成功
320  /// - false 失敗
321  /// @attention なし
322  ///
323  static bool IsKanaSjis( char unsigned ch ) noexcept;
324 
325  //---------------------------------------------------------------------
326  /// S-JIS確定半角カナ判定関数
327  ///
328  /// S-JIS確定半角カナ判定関数です。
329  ///
330  /// @param[in] ch 文字コード
331  /// @return 実行結果
332  /// - true 成功
333  /// - false 失敗
334  /// @attention なし
335  ///
336  static bool IsConfirmedKanaSjis( char unsigned ch ) noexcept;
337 
338  //---------------------------------------------------------------------
339  /// Unicode半角カナ判定関数
340  ///
341  /// Unicode半角カナ判定関数です。
342  ///
343  /// @param[in] ch 文字コード
344  /// @return 実行結果
345  /// - true 成功
346  /// - false 失敗
347  /// @attention なし
348  ///
349  static bool IsKanaUnicode( wchar_t ch ) noexcept;
350 
351  //---------------------------------------------------------------------
352  /// UTF-8コードサイズ取得関数
353  ///
354  /// UTF-8コードサイズ取得関数です。
355  ///
356  /// @param[in] ch UTF-8第1バイトコード
357  /// @param[out] nSize コードサイズ参照
358  /// @return 実行結果
359  /// - true 成功
360  /// - false 失敗
361  /// @attention なし
362  ///
363  static bool GetCodeSizeUtf8( char unsigned ch, int& nSize ) noexcept;
364 
365  //=====================================================================
366  // 限定公開変数
367  protected:
368  HANDLE m_hFile; ///< ファイルハンドル
369  UINT m_uCodePage; ///< コードページ種別
370 
371  //=====================================================================
372  // 削除関数
373  private:
374  CFile( CFile const& ) = delete;
375  CFile& operator=( CFile const& ) = delete;
376  };
377 }
378 
379 #pragma managed( pop )
ファイル入出力クラス
Definition: CFile.h:34
#define CP_UTF16
UTF-16コードページ
Definition: CFile.h:22
共通ライブラリ定義ヘッダファイル
共通ライブラリ名前空間
Definition: CArray.h:23
UINT m_uCodePage
コードページ種別
Definition: CFile.h:369
virtual HANDLE GetHandle() const noexcept
ファイルハンドル取得関数
Definition: CFile.h:72
HANDLE m_hFile
ファイルハンドル
Definition: CFile.h:368
#define LIB_COMMON_API
ダイナミックライブラリインポート宣言
Definition: LibCommonDef.h:44