Solution46
CFileStream.cpp
[詳解]
1 //=============================================================================
2 /// @file
3 /// ファイルストリームクラス実装ファイル
4 ///
5 /// ファイルストリームクラス実装ファイルです。
6 ///
7 /// $Id: CFileStream.cpp 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 managed( push, off )
14 
15 //=============================================================================
16 // インクルードファイル
17 #include <CFileStream.h>
18 
19 //=============================================================================
20 // 共通ライブラリ名前空間
21 namespace LibCommon {
22  //=========================================================================
23  // ファイルストリームクラス
24  //=========================================================================
25  // 構築子と解体子
26  //-------------------------------------------------------------------------
27  // コンストラクタ
29  // 基底クラスコンストラクタ
30  : CFile()
31  , CStream()
32  {}
33 
34  //=========================================================================
35  // 公開関数
36  //-------------------------------------------------------------------------
37  // 文字列出力関数
38  bool CFileStream::OutputString( wchar_t const* pszString ) noexcept {
39  // 処理ブロック
40  bool result = false;
41  do {
42  // 文字列ポインタを調べる
43  if ( nullptr == pszString ) {
44  // 失敗!
45  break;
46  }
47 
48  // ファイルに文字列出力する
49  LONGLONG nSize = ( ::wcslen( pszString ) * sizeof( wchar_t ) );
50  if ( nSize != Write( pszString, nSize ) ) {
51  // 失敗!
52  break;
53  }
54 
55  // 成功!
56  result = true;
57  } while ( false );
58 
59  // 実行結果を返す
60  return result;
61  }
62 
63  //-------------------------------------------------------------------------
64  // 1文字入力関数
65  bool CFileStream::InputChar( wchar_t& rCh ) noexcept {
66  // 処理ブロック
67  bool result = false;
68  do {
69  // 1文字リードする
70  if ( sizeof( wchar_t ) != Read( &rCh, sizeof( wchar_t ) ) ) {
71  // 失敗!
72  break;
73  }
74  // 文字コードを調べる
75  else if ( L'\r' == rCh ) {
76  // ファイルポインタを取得する
77  LONGLONG nPoint = GetFilePoint();
78 
79  // 次の1文字をリードする
80  wchar_t chNext;
81  if ( sizeof( wchar_t ) == Read( &chNext, sizeof( wchar_t ) ) ) {
82  // 文字コードを調べる
83  if ( L'\n' == chNext ) {
84  // 文字コードを設定する
85  rCh = chNext;
86  }
87  else {
88  // ファイルポインタを復元する
89  SetFilePoint( nPoint );
90  }
91  }
92  }
93 
94  // 成功!
95  result = true;
96  } while ( false );
97 
98  // 実行結果を返す
99  return result;
100  }
101 
102  //-------------------------------------------------------------------------
103  // ストリームサイズ取得関数
104  int CFileStream::GetStreamSize() const noexcept {
105  // ファイルサイズを返す
106  return static_cast< int >( GetFileSize() );
107  }
108 
109  //-------------------------------------------------------------------------
110  // ストリームポインタ取得関数
111  int CFileStream::GetStreamPoint() const noexcept {
112  // ファイルポインタを返す
113  return static_cast< int >( GetFilePoint() );
114  }
115 
116  //-------------------------------------------------------------------------
117  // ストリームポインタ設定関数
118  bool CFileStream::SetStreamPoint( int nPoint ) noexcept {
119  // ファイルポインタを設定する
120  return SetFilePoint( nPoint );
121  }
122 
123  //-------------------------------------------------------------------------
124  // ストリーム終端設定関数
125  bool CFileStream::SetStreamEnd() noexcept {
126  // ファイル終端を設定する
127  return SetFileEnd();
128  }
129 }
130 
131 #pragma managed( pop )
virtual bool SetFileEnd() noexcept
ファイル終端設定関数
Definition: CFile.cpp:404
virtual int GetStreamSize() const noexcept override
ストリームサイズ取得関数
virtual LONGLONG GetFilePoint() const noexcept
ファイルポインタ取得関数
Definition: CFile.cpp:360
virtual LONGLONG Read(void *pBuffer, LONGLONG nSize) noexcept
リード関数
Definition: CFile.cpp:207
ファイル入出力クラス
Definition: CFile.h:34
virtual bool SetStreamPoint(int nPoint) noexcept override
ストリームポインタ設定関数
virtual bool OutputString(wchar_t const *pszString) noexcept override
文字列出力関数
Definition: CFileStream.cpp:38
virtual bool SetFilePoint(LONGLONG nPoint) noexcept
ファイルポインタ設定関数
Definition: CFile.cpp:382
CFileStream() noexcept
コンストラクタ
Definition: CFileStream.cpp:28
共通ライブラリ名前空間
Definition: CArray.h:23
virtual bool InputChar(wchar_t &rCh) noexcept override
1文字入力関数
Definition: CFileStream.cpp:65
ストリームクラス
Definition: CStream.h:31
virtual int GetStreamPoint() const noexcept override
ストリームポインタ取得関数
virtual LONGLONG Write(void const *pBuffer, LONGLONG nSize) noexcept
ライト関数
Definition: CFile.cpp:273
ファイルストリームクラスヘッダファイル
virtual LONGLONG GetFileSize() const noexcept
ファイルサイズ取得関数
Definition: CFile.cpp:339
virtual bool SetStreamEnd() noexcept override
ストリーム終端設定関数