/*---------------------------------------------------------------------------* Project: Horizon File: fs_FileInputStream.h Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 33174 $ *---------------------------------------------------------------------------*/ #ifndef NN_FS_FS_FILEINPUTSTREAM_H_ #define NN_FS_FS_FILEINPUTSTREAM_H_ #include #include #include namespace nn { namespace fs { /*! :category ファイル・ディレクトリ操作 @brief ファイルを読むためのクラスです。 パス名で指定されたファイルを開き、その内容を読むことができます。 パス名の指定には、ワイド文字列とマルチバイト文字列の両方が使えますが、 特別な理由が無い限りは、ワイド文字列を使うようにしてください。 */ class FileInputStream : public IInputStream, public detail::FileBase, private nn::util::NonCopyable { public: /*! :overload noparam @brief コンストラクタです。 引数の無いオーバロードでは、ファイルは開きません。ファイルを操作するためには、別途 @ref TryInitialize を呼ぶ必要があります。 パス名を指定したオーバロードでは、指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 */ FileInputStream() {} /*! :overload wcharparam @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 @param[in] pathName 開くファイルのパス */ FileInputStream(const wchar_t* pathName) : detail::FileBase(pathName, OPEN_MODE_READ) {} /*! :overload charparam @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません) */ FileInputStream(const char* pathName) : detail::FileBase(pathName, OPEN_MODE_READ) {} /*! :overload wcharparam @brief 指定されたファイルを開きます。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 @param[in] pathName 開くファイルのパス */ void Initialize(const wchar_t* pathName) { detail::FileBase::Initialize(pathName, OPEN_MODE_READ); } /*! :overload charparam @brief 指定されたファイルを開きます。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません) */ void Initialize(const char* pathName) { detail::FileBase::Initialize(pathName, OPEN_MODE_READ); } /*! :overload wcharparam @brief 指定されたファイルを開くことを試みます。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。 @param[in] pathName 開くファイルのパス @return 処理の結果を返します。 */ Result TryInitialize(const wchar_t* pathName) { return detail::FileBase::TryInitialize(pathName, OPEN_MODE_READ); } /*! :overload charparam @brief 指定されたファイルを開くことを試みます。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません) @return 処理の結果を返します。 */ Result TryInitialize(const char* pathName) { return detail::FileBase::TryInitialize(pathName, OPEN_MODE_READ); } /*! @brief ファイルを閉じます。 ファイルを閉じます。ファイルが開かれていなかった場合は何もしません。 */ void Finalize() { detail::FileBase::Finalize(); } /*! @brief デストラクタです。 ファイルが開かれていればファイルを閉じます。 */ virtual ~FileInputStream() {} /*! @brief ファイルから指定サイズをバッファに読み込みます。 ファイルの現在位置から最大 size バイトデータを読み込み、buffer で指定されたアドレスの領域にコピーします。 @param[in] buffer コピー先のバッファへのポインタ @param[in] size コピーする最大バイト数 @return 実際にコピーしたバイト数を返します。ファイルの終端に達したときは 0 を返します。 */ virtual s32 Read(void* buffer, size_t size) { return detail::FileBase::Read(buffer, size); } /*! @brief ファイルから指定サイズをバッファに読み込みます。 ファイルの現在位置から最大 size バイトデータを読み込み、buffer で指定されたアドレスの領域にコピーします。 @param[out] pOut 実際にコピーしたバイト数が格納されます。ファイルの終端に達したときは 0 が格納されます。 @param[in] buffer コピー先のバッファへのポインタ @param[in] size コピーする最大バイト数 @return 処理の結果を返します。 */ virtual Result TryRead(s32* pOut, void* buffer, size_t size) { return detail::FileBase::TryRead(pOut, buffer, size); } /*! @brief ファイルの読み出し位置を変更します。 base で指定された位置から position 離れた場所に読み出し位置を設定します。 @param[in] base 読み出し位置の変更する基準を指定します。 @param[in] position 読み出し位置の変更する位置を指定します。 */ virtual void Seek(s64 position, PositionBase base) { detail::FileBase::Seek(position, base); } /*! @brief ファイルの読み出し位置を変更します。 base で指定された位置から position 離れた場所に読み出し位置を設定します。 @param[in] base 読み出し位置の変更する基準を指定します。 @param[in] position 読み出し位置の変更する位置を指定します。 @return 処理の結果を返します。 */ virtual Result TrySeek(s64 position, PositionBase base) { return detail::FileBase::TrySeek(position, base); } /*! @brief ファイル先頭から数えた現在の読み出し位置を取得します。 @return 現在の位置を返します。 */ virtual s64 GetPosition() const { return detail::FileBase::GetPosition(); } /*! @brief ファイル先頭から数えた現在の読み出し位置を取得します。 @param[out] pOut 現在の位置が格納されます。 @return 処理の結果を返します。 */ virtual Result TryGetPosition(s64* pOut) const { return detail::FileBase::TryGetPosition(pOut); } /*! @brief ファイル先頭から数えた現在の読み出し位置を設定します。 この関数は処理の結果を返さないため、アプリケーション側でエラーハンドリングを行なうことができません。 rom アーカイブ以外では @ref TrySetPosition を使用してください。 @param[in] position 読み出し位置を指定します。 */ virtual void SetPosition(s64 position) { detail::FileBase::SetPosition(position); } /*! @brief ファイル先頭から数えた現在の読み出し位置を設定します。 @param[in] position 読み出し位置を指定します。 @return 処理の結果を返します。 */ virtual Result TrySetPosition(s64 position) { return detail::FileBase::TrySetPosition(position); } /*! @brief ファイルサイズを取得します。 @return ファイルサイズを返します。 */ virtual s64 GetSize() const { return detail::FileBase::GetSize(); } /*! @brief ファイルサイズを取得します。 @param[out] pOut ファイルサイズが格納されます。 @return 処理の結果を返します。 */ virtual Result TryGetSize(s64* pOut) const { return detail::FileBase::TryGetSize(pOut); } }; }} #endif