1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: fs_FileInputStream.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: 32512 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_FS_FS_FILEINPUTSTREAM_H_ 17 #define NN_FS_FS_FILEINPUTSTREAM_H_ 18 19 #include <nn/fs/fs_IInputStream.h> 20 #include <nn/fs/fs_FileBase.h> 21 #include <nn/fnd/fnd_Storage.h> 22 23 namespace nn { namespace fs { 24 25 /*! 26 :category ファイル・ディレクトリ操作 27 28 @brief ファイルを読むためのクラスです。 29 30 パス名で指定されたファイルを開き、その内容を読むことができます。 31 パス名の指定には、ワイド文字列とマルチバイト文字列の両方が使えますが、 32 特別な理由が無い限りは、ワイド文字列を使うようにしてください。 33 */ 34 class FileInputStream : public IInputStream, public detail::FileBase, private nn::util::NonCopyable<FileInputStream> 35 { 36 public: 37 38 /*! 39 :overload noparam 40 41 @brief コンストラクタです。 42 43 引数の無いオーバロードでは、ファイルは開きません。ファイルを操作するためには、別途 @ref TryInitialize を呼ぶ必要があります。 44 45 パス名を指定したオーバロードでは、指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 46 47 */ FileInputStream()48 FileInputStream() {} 49 50 /*! 51 :overload wcharparam 52 53 @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。 54 55 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 56 57 この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。 58 rom アーカイブ以外では @ref TryInitialize を使用してください。 59 60 @param[in] pathName 開くファイルのパス 61 */ FileInputStream(const wchar_t * pathName)62 FileInputStream(const wchar_t* pathName) : detail::FileBase(pathName, OPEN_MODE_READ) {} 63 64 /*! 65 :overload charparam 66 67 @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。 68 69 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。@n 70 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 71 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 72 73 この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。 74 rom アーカイブ以外では @ref TryInitialize を使用してください。 75 76 @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません) 77 */ FileInputStream(const char * pathName)78 FileInputStream(const char* pathName) : detail::FileBase(pathName, OPEN_MODE_READ) {} 79 80 /*! 81 :overload wcharparam 82 83 @brief 指定されたファイルを開きます。 84 85 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 86 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 87 88 この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。 89 rom アーカイブ以外では @ref TryInitialize を使用してください。 90 91 @param[in] pathName 開くファイルのパス 92 */ Initialize(const wchar_t * pathName)93 void Initialize(const wchar_t* pathName) { detail::FileBase::Initialize(pathName, OPEN_MODE_READ); } 94 95 /*! 96 :overload charparam 97 98 @brief 指定されたファイルを開きます。 99 100 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 101 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。@n 102 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 103 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 104 105 この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。 106 rom アーカイブ以外では @ref TryInitialize を使用してください。 107 108 @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません) 109 */ Initialize(const char * pathName)110 void Initialize(const char* pathName) { detail::FileBase::Initialize(pathName, OPEN_MODE_READ); } 111 112 /*! 113 :overload wcharparam 114 115 @brief 指定されたファイルを開くことを試みます。 116 117 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。@n 118 ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。 119 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 120 121 @param[in] pathName 開くファイルのパス 122 123 @return ファイルを開いた結果。 124 */ TryInitialize(const wchar_t * pathName)125 Result TryInitialize(const wchar_t* pathName) { return detail::FileBase::TryInitialize(pathName, OPEN_MODE_READ); } 126 127 /*! 128 :overload charparam 129 130 @brief 指定されたファイルを開くことを試みます。 131 132 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。@n 133 ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。 134 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。@n 135 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 136 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 137 138 @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません) 139 140 @return ファイルを開いた結果。 141 */ TryInitialize(const char * pathName)142 Result TryInitialize(const char* pathName) { return detail::FileBase::TryInitialize(pathName, OPEN_MODE_READ); } 143 144 /*! 145 @brief ファイルを閉じます。 146 147 ファイルを閉じます。ファイルが開かれていなかった場合は何もしません。 148 */ Finalize()149 void Finalize() { detail::FileBase::Finalize(); } 150 151 /*! 152 @brief デストラクタです。 153 154 ファイルが開かれていればファイルを閉じます。 155 */ ~FileInputStream()156 virtual ~FileInputStream() {} 157 158 /*! 159 @brief ファイルから指定サイズをバッファに読み込みます。 160 161 ファイルの現在位置から最大 size バイトデータを読み込み、 162 buffer で指定されたアドレスの領域にコピーします。 163 実際にコピーしたバイト数を返します。 164 165 ファイルの終端に達したときは、0 を返します。 166 167 この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。 168 rom アーカイブ以外では @ref TryRead を使用してください。 169 170 @param[in] buffer コピー先のバッファへのポインタ 171 @param[in] size コピーする最大バイト数 172 173 @return 実際にコピーしたバイト数を返します。ファイルの終端に達したときは 0 を返します。 174 */ Read(void * buffer,size_t size)175 virtual s32 Read(void* buffer, size_t size) { return detail::FileBase::Read(buffer, size); } 176 177 /*! 178 @brief ファイルから指定サイズをバッファに読み込みます。 179 180 ファイルの現在位置から最大 size バイトデータを読み込み、 181 buffer で指定されたアドレスの領域にコピーします。 182 実際にコピーしたバイト数を返します。 183 184 ファイルの終端に達したときは、0 を返します。 185 186 @param[out] pOut 実際にコピーしたバイト数が格納されます。ファイルの終端に達したときは 0 が格納されます。 187 @param[in] buffer コピー先のバッファへのポインタ 188 @param[in] size コピーする最大バイト数 189 190 @return 処理の結果を返します。 191 */ TryRead(s32 * pOut,void * buffer,size_t size)192 virtual Result TryRead(s32* pOut, void* buffer, size_t size) { return detail::FileBase::TryRead(pOut, buffer, size); } 193 194 /*! 195 @brief ファイルの読み出し位置を変更します。 196 197 base で指定された位置から position 離れた場所に読み出し位置を設定します。 198 199 この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。 200 rom アーカイブ以外では @ref TrySeek を使用してください。 201 202 @param[in] base 読み出し位置の変更する基準を指定します。 203 @param[in] position 読み出し位置の変更する位置を指定します。 204 */ Seek(s64 position,PositionBase base)205 virtual void Seek(s64 position, PositionBase base) { detail::FileBase::Seek(position, base); } 206 207 /*! 208 @brief ファイルの読み出し位置を変更します。 209 210 base で指定された位置から position 離れた場所に読み出し位置を設定します。 211 212 @param[in] base 読み出し位置の変更する基準を指定します。 213 @param[in] position 読み出し位置の変更する位置を指定します。 214 215 @return 処理の結果を返します。 216 */ TrySeek(s64 position,PositionBase base)217 virtual Result TrySeek(s64 position, PositionBase base) { return detail::FileBase::TrySeek(position, base); } 218 219 /*! 220 @brief ファイル先頭から数えた現在の読み出し位置を取得します。 221 222 この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。 223 rom アーカイブ以外では @ref TryGetPosition を使用してください。 224 225 @return 現在の位置を返します。 226 */ GetPosition()227 virtual s64 GetPosition() const { return detail::FileBase::GetPosition(); } 228 229 /*! 230 @brief ファイル先頭から数えた現在の読み出し位置を取得します。 231 232 @param[out] pOut 現在の位置が格納されます。 233 234 @return 処理の結果を返します。 235 */ TryGetPosition(s64 * pOut)236 virtual Result TryGetPosition(s64* pOut) const { return detail::FileBase::TryGetPosition(pOut); } 237 238 /*! 239 @brief ファイル先頭から数えた現在の読み出し位置を設定します。 240 241 この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。 242 rom アーカイブ以外では @ref TrySetPosition を使用してください。 243 244 @param[in] position 読み出し位置を指定します。 245 */ SetPosition(s64 position)246 virtual void SetPosition(s64 position) { detail::FileBase::SetPosition(position); } 247 248 /*! 249 @brief ファイル先頭から数えた現在の読み出し位置を設定します。 250 251 @param[in] position 読み出し位置を指定します。 252 253 @return 処理の結果を返します。 254 */ TrySetPosition(s64 position)255 virtual Result TrySetPosition(s64 position) { return detail::FileBase::TrySetPosition(position); } 256 257 /*! 258 @brief ファイルサイズを取得します。 259 260 この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。 261 rom アーカイブ以外では @ref TryGetSize を使用してください。 262 263 @return ファイルサイズを返します。 264 */ GetSize()265 virtual s64 GetSize() const { return detail::FileBase::GetSize(); } 266 267 /*! 268 @brief ファイルサイズを取得します。 269 270 @param[out] pOut ファイルサイズが格納されます。 271 272 @return 処理の結果を返します。 273 */ TryGetSize(s64 * pOut)274 virtual Result TryGetSize(s64* pOut) const { return detail::FileBase::TryGetSize(pOut); } 275 276 }; 277 278 }} 279 280 #endif 281