/*---------------------------------------------------------------------------* 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: 31074 $ *---------------------------------------------------------------------------*/ #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: /*! @brief コンストラクタです。 引数の無いオーバロードでは、ファイルは開きません。ファイルを操作するためには、別途 @ref Initialize を呼ぶ必要があります。 パス名を指定したオーバロードでは、指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 */ FileInputStream() {} /*! @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 この関数は、処理の結果を返さないためエラーハンドリングを行なうことができません。 基本的に @ref TryInitialize を使うようにしてください。 @param[in] pathName 開くファイルのパス */ FileInputStream(const wchar_t* pathName) : detail::FileBase(pathName, OPEN_MODE_READ) {} /*! @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。@n この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 この関数は、処理の結果を返さないためエラーハンドリングを行なうことができません。 基本的に @ref TryInitialize を使うようにしてください。 @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません) */ FileInputStream(const char* pathName) : detail::FileBase(pathName, OPEN_MODE_READ) {} /*! @brief 指定されたファイルを開きます。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 この関数は、処理の結果を返さないためエラーハンドリングを行なうことができません。 基本的に @ref TryInitialize を使うようにしてください。 @param[in] pathName 開くファイルのパス */ void Initialize(const wchar_t* pathName) { detail::FileBase::Initialize(pathName, OPEN_MODE_READ); } /*! @brief 指定されたファイルを開きます。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。@n この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 この関数は、処理の結果を返さないためエラーハンドリングを行なうことができません。 基本的に @ref TryInitialize を使うようにしてください。 @param[in] pathName 開くファイルのパス(ASCII 文字以外を含むことはできません) */ void Initialize(const char* pathName) { detail::FileBase::Initialize(pathName, OPEN_MODE_READ); } /*! @brief 指定されたファイルを開くことを試みます。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。@n ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 @param[in] pathName 開くファイルのパス @return ファイルを開いた結果。 */ Result TryInitialize(const wchar_t* pathName) { return detail::FileBase::TryInitialize(pathName, OPEN_MODE_READ); } /*! @brief 指定されたファイルを開くことを試みます。 指定されたパスのファイルを読み込み専用で開き、読み込める状態にします。@n ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。@n この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 @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 で指定されたアドレスの領域にコピーします。 実際にコピーしたバイト数を返します。 ファイルの終端に達したときは、0 を返します。 この関数は、処理の結果を返さないためエラーハンドリングを行なうことができません。 基本的に @ref TryRead を使うようにしてください。 @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 で指定されたアドレスの領域にコピーします。 実際にコピーしたバイト数を返します。 ファイルの終端に達したときは、0 を返します。 @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 離れた場所に読み出し位置を設定します。 この関数は、処理の結果を返さないためエラーハンドリングを行なうことができません。 基本的に @ref TrySeek を使うようにしてください。 @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 ファイル先頭から数えた現在の読み出し位置を取得します。 この関数は、処理の結果を返さないためエラーハンドリングを行なうことができません。 基本的に @ref TryGetPosition を使うようにしてください。 @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 ファイル先頭から数えた現在の読み出し位置を設定します。 この関数は、処理の結果を返さないためエラーハンドリングを行なうことができません。 基本的に @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 ファイルサイズを取得します。 この関数は、処理の結果を返さないためエラーハンドリングを行なうことができません。 基本的に @ref TryGetSize を使うようにしてください。 @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