/*---------------------------------------------------------------------------* Project: Horizon File: fs_FileStream.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: 25190 $ *---------------------------------------------------------------------------*/ #ifndef NN_FS_FS_FILESTREAM_H_ #define NN_FS_FS_FILESTREAM_H_ #include #include #include namespace nn { namespace fs { /*! @brief ファイルを読み書きするためのクラスです。 パス名で指定されたファイルを開き、データを読み書きできます。 パス名の指定には、ワイド文字列とマルチバイト文字列の両方が使えますが、 特別な理由が無い限りは、ワイド文字列を使うようにしてください。 */ class FileStream : public IStream, public detail::FileBase, private nn::util::NonCopyable { public: /*! @brief コンストラクタです。 引数の無いオーバロードでは、ファイルは開きません。ファイルを操作するためには、別途 @ref Initialize を呼ぶ必要があります。 ファイルを開く際の openMode 引数には、OPEN_MODE_READ (読み込みモードで開く), OPEN_MODE_WRITE (書き込みモードで開く), OPEN_MODE_CREATE (ファイルが無ければファイル作成する) のビット和を指定することができます。 OPEN_MODE_CREATE を指定する際には、OPEN_MODE_WRITE の指定も必要となります。 */ FileStream() {} /*! @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。 指定されたパスのファイルを指定された OpenMode で開きます。 @param[in] pathName 開くファイルのパス @param[in] openMode ファイルを開くモード */ FileStream(const wchar_t* pathName, bit32 openMode) : detail::FileBase(pathName, openMode) {} /*! @brief オブジェクトを構築し、指定されたファイルを開くコンストラクタです。 指定されたパスのファイルを指定された OpenMode で開きます。 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 @param[in] pathName 開くファイルのパス @param[in] openMode ファイルを開くモード */ FileStream(const char* pathName, bit32 openMode) : detail::FileBase(pathName, openMode) {} /*! @brief 指定されたファイルを開きます。 指定されたパスのファイルを指定された OpenMode で開きます。 指定されたパスにファイルが存在しない場合は、ファイルを作成してから書き込み専用で開きます。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 openMode 引数の詳細については、@ref FileStream::FileStream を参照してください。 @param[in] pathName 開くファイルのパス @param[in] openMode ファイルを開くモード */ void Initialize(const wchar_t* pathName, bit32 openMode) { detail::FileBase::Initialize(pathName, openMode); } /*! @brief 指定されたファイルを開きます。 指定されたパスのファイルを指定された OpenMode で開きます。 指定されたパスにファイルが存在しない場合は、ファイルを作成してから書き込み専用で開きます。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 @param[in] pathName 開くファイルのパス @param[in] openMode ファイルを開くモード */ void Initialize(const char* pathName, bit32 openMode) { detail::FileBase::Initialize(pathName, openMode); } /*! @brief 指定されたファイルを開きます。 指定されたパスのファイルを指定された OpenMode で開きます。 指定されたパスにファイルが存在しない場合は、ファイルを作成してから書き込み専用で開きます。 ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。 既にこのオブジェクトでファイルを開いている場合に呼ぶことはできません。 openMode 引数の詳細については、@ref FileStream::FileStream を参照してください。 @param[in] pathName 開くファイルのパス @param[in] openMode ファイルを開くモード */ nn::Result TryInitialize(const wchar_t* pathName, bit32 openMode) { return detail::FileBase::TryInitialize(pathName, openMode); } /*! @brief 指定されたファイルを開きます。 指定されたパスのファイルを指定された OpenMode で開きます。 指定されたパスにファイルが存在しない場合は、ファイルを作成してから書き込み専用で開きます。 ファイルを開く途中でエラーが発生した場合は、そのエラーを返します。 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。 @param[in] pathName 開くファイルのパス @param[in] openMode ファイルを開くモード */ nn::Result TryInitialize(const char* pathName, bit32 openMode) { return detail::FileBase::TryInitialize(pathName, openMode); } /*! @brief ファイルを閉じます。 ファイルを閉じます。ファイルが開かれていなかった場合は何もしません。 */ void Finalize() { detail::FileBase::Finalize(); } /*! @brief デストラクタです。 ファイルが開かれていればファイルを閉じます。 */ virtual ~FileStream() {} /*! @brief ファイルから指定サイズをバッファに読み込みます。 ファイルの現在位置から最大 size バイトデータを読み込み、 buffer で指定されたアドレスの領域にコピーします。 実際にコピーしたバイト数を返します。 ファイルの終端に達したときは、0 を返します。 @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 バッファから指定サイズをファイルに読み込みます。 buffer で指定されたアドレスの領域にから、 最大 size バイトをファイルに書き込みます。 実際に書き込んだバイト数を返します。 ファイルの終端に達したときは、0 を返します。 @param[in] buffer 書き込むデータが含まれているバッファへのポインタ @param[in] size ファイルに書き込む最大バイト数 @return 実際にコピーしたバイト数を返します。ファイルの終端に達したときは 0 を返します。 */ virtual s32 Write(const void* buffer, size_t size) { return detail::FileBase::Write(buffer, size); } /*! @brief バッファから指定サイズをファイルに読み込みます。 buffer で指定されたアドレスの領域にから、 最大 size バイトをファイルに書き込みます。 実際に書き込んだバイト数を返します。 ファイルの終端に達したときは、0 を返します。 @param[out] pOut 実際にコピーしたバイト数が格納されます。ファイルの終端に達したときは 0 が格納されます。 @param[in] buffer 書き込むデータが含まれているバッファへのポインタ @param[in] size ファイルに書き込む最大バイト数 @return 実際にコピーしたバイト数を返します。ファイルの終端に達したときは 0 を返します。 */ virtual Result TryWrite(s32* pOut, const void* buffer, size_t size) { return detail::FileBase::TryWrite(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 ファイル先頭から数えた現在の読み出し位置を設定します。 @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); } /*! @brief ファイルサイズを設定します。 @param[in] size ファイルサイズを指定します。 */ virtual void SetSize(s64 size) { detail::FileBase::SetSize(size); } /*! @brief ファイルサイズを設定します。 @param[in] size ファイルサイズを指定します。 @return 処理の結果を返します。 */ virtual Result TrySetSize(s64 size) { return detail::FileBase::TrySetSize(size); } }; }} #endif