1 /*---------------------------------------------------------------------------* 2 Project: Horizon 3 File: hio_HostFile.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: 25329 $ 14 *---------------------------------------------------------------------------*/ 15 16 #ifndef NN_HIO_CTR_HIO_HOSTFILE_H_ 17 #define NN_HIO_CTR_HIO_HOSTFILE_H_ 18 #ifdef NN_SWITCH_ENABLE_HOST_IO 19 20 /*! @file 21 @brief HostFile クラスを定義します。 22 23 :include nn/hio.h 24 25 */ 26 27 #include <nn/types.h> 28 29 namespace nn { 30 namespace hio { 31 namespace CTR { 32 33 class HostSystemChannel; 34 35 36 /*! 37 @brief ホストファイルシステムのファイルを表すクラスです。 38 ファイルに対する読み書きの機能を提供します。 39 */ 40 class HostFile 41 { 42 public: 43 /*! 44 @brief ファイルシーク時の起点となる位置を示す定数群です。 45 46 */ 47 enum SeekType 48 { 49 SEEK_TYPE_SET, //!< ファイルの先頭を基準としてファイルのカレント位置を設定することを示す定数です。 50 SEEK_TYPE_CURRENT, //!< ファイルのカレント位置を基準としてファイルのカレント位置を設定することを示す定数です。 51 SEEK_TYPE_END //!< ファイルの末尾を基準としてファイルのカレント位置を設定することを示す定数です。 52 }; 53 54 /*! 55 @brief ファイルへのアクセスモードを示す定数群です。 56 57 */ 58 enum AccessMode 59 { 60 ACCESS_MODE_READ = (1u << 31), //!< 読み込みでのアクセスを示します。 61 ACCESS_MODE_WRITE = (1u << 30), //!< 書き込みでのアクセスを示します。 62 ACCESS_MODE_READ_WRITE = (ACCESS_MODE_READ|ACCESS_MODE_WRITE) //!< 読み書きでのアクセスを示します。 63 }; 64 65 66 /*! 67 @brief ファイル開く時の挙動を示す定数群群です。 68 69 */ 70 enum OpenDisp 71 { 72 OPEN_DISP_CREATE_NEW = 1, //!< 新しくファイルを作ります。 73 OPEN_DISP_CREATE_ALWAYS = 2, //!< 常に新しくファイルを作ります。 74 OPEN_DISP_OPEN_EXISTING = 3, //!< 既存のファイルを開きます。 75 OPEN_DISP_OPEN_ALWAYS = 4 //!< 常にファイルを開きます。 76 }; 77 78 private: 79 int m_Fd; 80 81 public: 82 /*! 83 @brief コンストラクタです。別途 @ref Open() を呼び出して、操作対象のファイルを開く必要があります。 84 85 */ HostFile()86 HostFile() : m_Fd(-1) {} 87 88 /*! 89 @brief デストラクタです。ファイルがオープンされている場合はクローズします。 90 91 */ ~HostFile()92 ~HostFile() 93 { 94 if( m_Fd >= 0 ) 95 { 96 Close(); 97 } 98 } 99 100 101 /*! 102 :overload nounicode 103 104 @brief 指定されたファイルを開きます。 105 106 @param[in] path オープンするファイルのパスを指定します。 107 @param[in] accessMode ファイルのアクセスモードを指定します。 108 @param[in] disp オープン時の挙動を指定します。 109 @return 処理の結果を返します。 110 111 */ 112 Result Open(const char* path, bit32 accessMode, OpenDisp disp); 113 114 /*! 115 :overload unicode 116 117 @brief 指定されたファイルを開きます。 118 119 @param[in] path オープンするファイルのパスを指定します。 120 @param[in] accessMode ファイルのアクセスモードを指定します。 121 @param[in] disp オープン時の挙動を指定します。 122 @return 処理の結果を返します。 123 124 */ 125 Result Open(const wchar_t* path, bit32 accessMode, OpenDisp disp); 126 127 /*! 128 @brief ファイルを閉じます。 129 130 @return 処理の結果を返します。 131 132 */ 133 Result Close(); 134 135 /*! 136 :overload withresult 137 138 @brief ファイルから指定サイズをバッファに読み込み、処理の結果を返します。 139 140 @param[out] pRead 実際にコピーしたバイト数が格納されます。ファイルの終端に達した時は 0 が格納されます。 141 @param[in] buf 読み込み先バッファへのポインタ。 142 @param[in] size 読み込みを行う最大バイト数。 143 @return 処理の結果を返します。 144 145 */ 146 Result Read(size_t* pRead, void* buf, size_t size); 147 148 /*! 149 :overload noresult 150 151 @brief ファイルから指定サイズをバッファに読み込み、実際に読み込んだバイト数を返します。 152 153 @param[in] buf 読み込み先バッファへのポインタ。 154 @param[in] size 読み込みを行う最大バイト数。 155 @return 実際にコピーしたバイト数。何らかのエラーが発生した場合は -1 を返します。 156 157 */ Read(void * buf,size_t size)158 s32 Read(void* buf, size_t size) 159 { 160 size_t read; 161 return Read(&read, buf, size).IsFailure() ? -1: static_cast<s32>(read); 162 } 163 164 /*! 165 :overload withresult 166 167 @brief バッファから指定サイズをファイルに書き込みます。 168 169 @param[out] pWritten 実際に書き込んだバイト数が格納されます。ファイルの終端に達した時は ? 170 @param[in] buf 書き込み元バッファへのポインタ。 171 @param[in] size 書き込みを行う最大バイト数。 172 @return 処理の結果を返します。 173 174 */ 175 Result Write(size_t* pWritten, const void* buf, size_t size); 176 177 /*! 178 :overload noresult 179 180 @brief バッファから指定サイズをファイルに書き込み、実際に書き込んだバイト数を返します。 181 182 @param[in] buf 書き込み元バッファへのポインタ。 183 @param[in] size 書き込みを行う最大バイト数。 184 @return 実際に書き込んだバイト数。何らかのエラーが発生した場合は -1 を返します。 185 186 */ Write(const void * buf,size_t size)187 s32 Write(const void* buf, size_t size) 188 { 189 size_t written; 190 return Write(&written, buf, size).IsFailure() ? -1: static_cast<s32>(written); 191 } 192 193 /*! 194 :overload withresult 195 196 @brief 読み書きの開始位置を変更します。 197 198 @param[out] pPosition 変更後のファイルの先頭からの位置が格納されます。 199 @param[in] offset 基準となる位置からの相対位置を指定します。 200 @param[in] type 基準となる位置を指定します。 201 @return 処理の結果を返します。 202 203 */ 204 Result Seek(s64* pPosition, s64 offset, SeekType type); 205 206 /*! 207 :overload noresult 208 209 @brief 読み書きの開始位置を変更し、変更後のファイルの先頭からの位置を返します。 210 211 @param[in] offset 基準となる位置からの相対位置を指定します。 212 @param[in] type 基準となる位置を指定します。 213 @return 変更後のファイルの先頭からの位置。何らかのエラーが発生した場合は -1 を返します。 214 215 */ Seek(s64 offset,SeekType type)216 s64 Seek(s64 offset, SeekType type) 217 { 218 s64 pos; 219 return Seek(&pos, offset, type).IsFailure() ? -1: pos; 220 } 221 222 /*! 223 @brief ファイルのサイズを変更します。 224 225 @param[in] size ファイルのサイズを指定します。 226 @return 処理の結果を返します。 227 228 */ 229 Result SetSize(s64 size); 230 }; 231 232 } 233 } 234 } 235 236 237 #endif // ifdef NN_SWITCH_ENABLE_HOST_IO 238 #endif // ifndef NN_HIO_CTR_HIO_HOSTFILE_H_ 239