1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: fs_FileStream.h 4 5 Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. 6 7 These coded instructions, statements, and computer programs contain 8 proprietary information of Nintendo of America Inc. and/or Nintendo 9 Company Ltd., and are protected by Federal copyright law. They may 10 not be disclosed to third parties or copied or duplicated in any form, 11 in whole or in part, without the prior written consent of Nintendo. 12 13 $Rev: 25190 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_FS_FS_FILESTREAM_H_ 17 #define NN_FS_FS_FILESTREAM_H_ 18 19 #include <nn/fs/fs_IStream.h> 20 #include <nn/fs/fs_FileBase.h> 21 #include <nn/fnd/fnd_Storage.h> 22 23 namespace nn { namespace fs { 24 25 /*! 26 @brief ファイルを読み書きするためのクラスです。 27 28 パス名で指定されたファイルを開き、データを読み書きできます。 29 パス名の指定には、ワイド文字列とマルチバイト文字列の両方が使えますが、 30 特別な理由が無い限りは、ワイド文字列を使うようにしてください。 31 */ 32 class FileStream : public IStream, public detail::FileBase, private nn::util::NonCopyable<FileStream> 33 { 34 public: 35 36 /*! 37 @brief コンストラクタです。 38 39 引数の無いオーバロードでは、ファイルは開きません。ファイルを操作するためには、別途 @ref Initialize を呼ぶ必要があります。 40 41 ファイルを開く際の openMode 引数には、OPEN_MODE_READ (読み込みモードで開く), 42 OPEN_MODE_WRITE (書き込みモードで開く), OPEN_MODE_CREATE (ファイルが無ければファイル作成する) のビット和を指定することができます。 43 OPEN_MODE_CREATE を指定する際には、OPEN_MODE_WRITE の指定も必要となります。 44 45 */ FileStream()46 FileStream() {} 47 48 /*! 49 @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。 50 51 指定されたパスのファイルを指定された OpenMode で開きます。 52 53 @param[in] pathName 開くファイルのパス 54 @param[in] openMode ファイルを開くモード 55 */ FileStream(const wchar_t * pathName,bit32 openMode)56 FileStream(const wchar_t* pathName, bit32 openMode) : detail::FileBase(pathName, openMode) {} 57 58 /*! 59 @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。 60 61 指定されたパスのファイルを指定された OpenMode で開きます。 62 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 63 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 64 65 @param[in] pathName 開くファイルのパス 66 @param[in] openMode ファイルを開くモード 67 */ FileStream(const char * pathName,bit32 openMode)68 FileStream(const char* pathName, bit32 openMode) : detail::FileBase(pathName, openMode) {} 69 70 /*! 71 @brief 指定されたファイルを開きます。 72 73 指定されたパスのファイルを指定された OpenMode で開きます。 74 指定されたパスにファイルが存在しない場合は、ファイルを作成してから書き込み専用で開きます。 75 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 76 77 openMode 引数の詳細については、@ref FileStream::FileStream を参照してください。 78 79 @param[in] pathName 開くファイルのパス 80 @param[in] openMode ファイルを開くモード 81 */ Initialize(const wchar_t * pathName,bit32 openMode)82 void Initialize(const wchar_t* pathName, bit32 openMode) { detail::FileBase::Initialize(pathName, openMode); } 83 84 /*! 85 @brief 指定されたファイルを開きます。 86 87 指定されたパスのファイルを指定された OpenMode で開きます。 88 指定されたパスにファイルが存在しない場合は、ファイルを作成してから書き込み専用で開きます。 89 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 90 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 91 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 92 93 @param[in] pathName 開くファイルのパス 94 @param[in] openMode ファイルを開くモード 95 */ Initialize(const char * pathName,bit32 openMode)96 void Initialize(const char* pathName, bit32 openMode) { detail::FileBase::Initialize(pathName, openMode); } 97 98 /*! 99 @brief 指定されたファイルを開きます。 100 101 指定されたパスのファイルを指定された OpenMode で開きます。 102 指定されたパスにファイルが存在しない場合は、ファイルを作成してから書き込み専用で開きます。 103 ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。 104 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 105 106 openMode 引数の詳細については、@ref FileStream::FileStream を参照してください。 107 108 @param[in] pathName 開くファイルのパス 109 @param[in] openMode ファイルを開くモード 110 */ TryInitialize(const wchar_t * pathName,bit32 openMode)111 nn::Result TryInitialize(const wchar_t* pathName, bit32 openMode) { return detail::FileBase::TryInitialize(pathName, openMode); } 112 113 /*! 114 @brief 指定されたファイルを開きます。 115 116 指定されたパスのファイルを指定された OpenMode で開きます。 117 指定されたパスにファイルが存在しない場合は、ファイルを作成してから書き込み専用で開きます。 118 ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。 119 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 120 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 121 122 @param[in] pathName 開くファイルのパス 123 @param[in] openMode ファイルを開くモード 124 */ TryInitialize(const char * pathName,bit32 openMode)125 nn::Result TryInitialize(const char* pathName, bit32 openMode) { return detail::FileBase::TryInitialize(pathName, openMode); } 126 127 /*! 128 @brief ファイルを閉じます。 129 130 ファイルを閉じます。ファイルが開かれていなかった場合は何もしません。 131 */ Finalize()132 void Finalize() { detail::FileBase::Finalize(); } 133 134 /*! 135 @brief デストラクタです。 136 137 ファイルが開かれていればファイルを閉じます。 138 */ ~FileStream()139 virtual ~FileStream() {} 140 141 /*! 142 @brief ファイルから指定サイズをバッファに読み込みます。 143 144 ファイルの現在位置から最大 size バイトデータを読み込み、 145 buffer で指定されたアドレスの領域にコピーします。 146 実際にコピーしたバイト数を返します。 147 148 ファイルの終端に達したときは、0 を返します。 149 150 @param[in] buffer コピー先のバッファへのポインタ 151 @param[in] size コピーする最大バイト数 152 153 @return 実際にコピーしたバイト数を返します。ファイルの終端に達したときは 0 を返します。 154 */ Read(void * buffer,size_t size)155 virtual s32 Read(void* buffer, size_t size) { return detail::FileBase::Read(buffer, size); } 156 157 /*! 158 @brief ファイルから指定サイズをバッファに読み込みます。 159 160 ファイルの現在位置から最大 size バイトデータを読み込み、 161 buffer で指定されたアドレスの領域にコピーします。 162 実際にコピーしたバイト数を返します。 163 164 ファイルの終端に達したときは、0 を返します。 165 166 @param[out] pOut 実際にコピーしたバイト数が格納されます。ファイルの終端に達したときは 0 が格納されます。 167 @param[in] buffer コピー先のバッファへのポインタ 168 @param[in] size コピーする最大バイト数 169 170 @return 処理の結果を返します。 171 */ TryRead(s32 * pOut,void * buffer,size_t size)172 virtual Result TryRead(s32* pOut, void* buffer, size_t size) { return detail::FileBase::TryRead(pOut, buffer, size); } 173 174 /*! 175 @brief バッファから指定サイズをファイルに読み込みます。 176 177 buffer で指定されたアドレスの領域にから、 178 最大 size バイトをファイルに書き込みます。 179 実際に書き込んだバイト数を返します。 180 181 ファイルの終端に達したときは、0 を返します。 182 183 @param[in] buffer 書き込むデータが含まれているバッファへのポインタ 184 @param[in] size ファイルに書き込む最大バイト数 185 186 @return 実際にコピーしたバイト数を返します。ファイルの終端に達したときは 0 を返します。 187 */ Write(const void * buffer,size_t size)188 virtual s32 Write(const void* buffer, size_t size) { return detail::FileBase::Write(buffer, size); } 189 190 /*! 191 @brief バッファから指定サイズをファイルに読み込みます。 192 193 buffer で指定されたアドレスの領域にから、 194 最大 size バイトをファイルに書き込みます。 195 実際に書き込んだバイト数を返します。 196 197 ファイルの終端に達したときは、0 を返します。 198 199 @param[out] pOut 実際にコピーしたバイト数が格納されます。ファイルの終端に達したときは 0 が格納されます。 200 @param[in] buffer 書き込むデータが含まれているバッファへのポインタ 201 @param[in] size ファイルに書き込む最大バイト数 202 203 @return 実際にコピーしたバイト数を返します。ファイルの終端に達したときは 0 を返します。 204 */ TryWrite(s32 * pOut,const void * buffer,size_t size)205 virtual Result TryWrite(s32* pOut, const void* buffer, size_t size) { return detail::FileBase::TryWrite(pOut, buffer, size); } 206 207 /*! 208 @brief ファイルの読み込み・書き込み位置を変更します。 209 210 base で指定された位置から position 離れた場所に読み込み・書き込み位置を設定します。 211 212 @param[in] base 読み込み・書き込み位置の変更する基準を指定します。 213 @param[in] position 読み込み・書き込み位置の変更する位置を指定します。 214 */ Seek(s64 position,PositionBase base)215 virtual void Seek(s64 position, PositionBase base) { detail::FileBase::Seek(position, base); } 216 217 /*! 218 @brief ファイルの読み出し位置を変更します。 219 220 base で指定された位置から position 離れた場所に読み出し位置を設定します。 221 222 @param[in] base 読み出し位置の変更する基準を指定します。 223 @param[in] position 読み出し位置の変更する位置を指定します。 224 225 @return 処理の結果を返します。 226 */ TrySeek(s64 position,PositionBase base)227 virtual Result TrySeek(s64 position, PositionBase base) { return detail::FileBase::TrySeek(position, base); } 228 229 /*! 230 @brief ファイル先頭から数えた現在の読み出し位置を取得します。 231 232 @return 現在の位置を返します。 233 */ GetPosition()234 virtual s64 GetPosition() const { return detail::FileBase::GetPosition(); } 235 236 /*! 237 @brief ファイル先頭から数えた現在の読み出し位置を取得します。 238 239 @param[out] pOut 現在の位置が格納されます。 240 241 @return 処理の結果を返します。 242 */ TryGetPosition(s64 * pOut)243 virtual Result TryGetPosition(s64* pOut) const { return detail::FileBase::TryGetPosition(pOut); } 244 245 /*! 246 @brief ファイル先頭から数えた現在の読み出し位置を設定します。 247 248 @param[in] position 読み出し位置を指定します。 249 */ SetPosition(s64 position)250 virtual void SetPosition(s64 position) { detail::FileBase::SetPosition(position); } 251 252 /*! 253 @brief ファイル先頭から数えた現在の読み出し位置を設定します。 254 255 @param[in] position 読み出し位置を指定します。 256 257 @return 処理の結果を返します。 258 */ TrySetPosition(s64 position)259 virtual Result TrySetPosition(s64 position) { return detail::FileBase::TrySetPosition(position); } 260 261 /*! 262 @brief ファイルサイズを取得します。 263 264 @return ファイルサイズを返します。 265 */ GetSize()266 virtual s64 GetSize() const { return detail::FileBase::GetSize(); } 267 268 /*! 269 @brief ファイルサイズを取得します。 270 271 @param[out] pOut ファイルサイズが格納されます。 272 273 @return 処理の結果を返します。 274 */ TryGetSize(s64 * pOut)275 virtual Result TryGetSize(s64* pOut) const { return detail::FileBase::TryGetSize(pOut); } 276 277 /*! 278 @brief ファイルサイズを設定します。 279 280 @param[in] size ファイルサイズを指定します。 281 */ SetSize(s64 size)282 virtual void SetSize(s64 size) { detail::FileBase::SetSize(size); } 283 284 /*! 285 @brief ファイルサイズを設定します。 286 287 @param[in] size ファイルサイズを指定します。 288 289 @return 処理の結果を返します。 290 */ TrySetSize(s64 size)291 virtual Result TrySetSize(s64 size) { return detail::FileBase::TrySetSize(size); } 292 }; 293 294 }} 295 296 #endif 297