/*---------------------------------------------------------------------------* Project: Horizon File: hio_HostDirectory.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: 13274 $ *---------------------------------------------------------------------------*/ #ifndef NN_HIO_CTR_HIO_HOSTDIRECTORY_H_ #define NN_HIO_CTR_HIO_HOSTDIRECTORY_H_ #ifdef NN_SWITCH_ENABLE_HOST_IO /*! @file @brief HostDirectory クラスを定義します。 :include nn/hio.h */ #include #include #include #include namespace nn { namespace hio { namespace CTR { const int MAX_PATH = 260; //!< 扱うことのできる最大パス長を示します。この値には末尾の NULL も含まれます。 /*! @brief タイムスタンプを表す構造体です。 */ struct HostSystemTime { bit16 year; //!< 西暦を表します。 bit16 month; //!< 月を表します。 bit16 dayofweek; //!< 曜日を表します。 bit16 day; //!< 日を表します。 bit16 hour; //!< 時間を表します。 bit16 minute; //!< 分を表します。 bit16 second; //!< 秒を表します。 bit16 msec; //!< ミリ秒を表します。 }; /*! @brief ファイル属性を表す列挙体です。 */ enum FileAttribute { /*! @brief 読み込み専用であることを示します。 */ FILE_ATTRIBUTE_READ_ONLY = (1u << 0), /*! @brief ディレクトリであることを示します。 */ FILE_ATTRIBUTE_DIRECTORY = (1u << 4) }; class HostSystemChannel; //-------------------------------------------------- // A /*! @brief ディレクトリエントリを表す構造体です。 */ struct DirectoryEntryA { s64 fileSize; //!< ファイルサイズをバイト単位で表します。 bit32 fileAttributes; //!< 属性を @ref FileAttribute 型で表します。 HostSystemTime creationTime; //!< 作成された日時を @ref HostSystemTime 型で表します。 HostSystemTime lastAccessTime; //!< 最後にアクセスされた日時を @ref HostSystemTime 型で表します。 HostSystemTime lastWriteTime; //!< 最後に書き込まれた日時を @ref HostSystemTime 型で表します。 char filename[MAX_PATH]; //!< ファイル名を示します。 }; /*! @brief ホストファイルシステムのディレクトリを表すクラスです。ディレクトリに属するエントリ情報を取得することができます。 */ class HostDirectoryA { private: s32 m_Fd; NN_PADDING4; DirectoryEntryA m_NextEntry; public: /*! @brief コンストラクタです。別途 @ref Open() を呼び出して、操作対象のディレクトリをオープンする必要があります。 */ HostDirectoryA() : m_Fd(-1) { } /*! @brief デストラクタです。ディレクトリがオープンされている場合はクローズします。 */ ~HostDirectoryA() { if( m_Fd > 0 ) { Close(); } } /*! @brief ディレクトリをオープンします。 @ref GetNextEntry() によって、オープン済みのディレクトリに属するディレクトリエントリを取得することができるようになります。 @param[in] path オープンするディレクトリのパスを指定します。 @return 処理の結果を返します。 */ Result Open(const char* path); /*! @brief ディレクトリをクローズします。 @return 処理の結果を返します。 */ Result Close(); /*! @brief ディレクトリエントリを取得します。 @param[out] pEntry 取得したエントリの格納先を指定します。 @return 処理の結果を返します。 */ Result GetNextEntry(DirectoryEntryA* pEntry); }; //-------------------------------------------------- // W /*! @brief @ref DirectoryEntryA の Unicode 対応版です。 */ struct DirectoryEntryW { s64 fileSize; //!< ファイルサイズをバイト単位で表します。 bit32 fileAttributes; //!< 属性を @ref FileAttribute 型で表します。 HostSystemTime creationTime; //!< 作成された日時を @ref HostSystemTime 型で表します。 HostSystemTime lastAccessTime; //!< 最後にアクセスされた日時を @ref HostSystemTime 型で表します。 HostSystemTime lastWriteTime; //!< 最後に書き込まれた日時を @ref HostSystemTime 型で表します。 wchar_t filename[MAX_PATH]; //!< ファイル名を示します。 NN_PADDING4; }; /*! @brief @ref HostDirectoryA の Unicode 対応版です。 */ class HostDirectoryW { private: s32 m_Fd; NN_PADDING4; DirectoryEntryW m_NextEntry; public: /*! @brief コンストラクタです。別途 @ref Open() を呼び出して、操作対象のディレクトリをオープンする必要があります。 */ HostDirectoryW() : m_Fd(-1) { } /*! @brief デストラクタです。ディレクトリがオープンされている場合はクローズします。 */ ~HostDirectoryW() { if( m_Fd > 0 ) { Close(); } } /*! @brief ディレクトリをオープンします。 @ref GetNextEntry() によって、オープン済みのディレクトリに属するディレクトリエントリを取得することができるようになります。 @param[in] path オープンするディレクトリのパスを指定します。 @return 処理の結果を返します。 */ Result Open(const wchar_t* path); /*! @brief ディレクトリをクローズします。 @return 処理の結果を返します。 */ Result Close(); /*! @brief ディレクトリエントリを取得します。 @param[out] pEntry 取得したエントリの格納先を指定します。 @return 処理の結果を返します。 */ Result GetNextEntry(DirectoryEntryW* pEntry); }; } } } #endif // ifdef NN_SWITCH_ENABLE_HOST_IO #endif // ifndef NN_HIO_CTR_HIO_HOSTDIRECTORY_H_