1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     fs_FileSystem.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: 34212 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_FS_FS_FILESYSTEM_H_
17 #define NN_FS_FS_FILESYSTEM_H_
18 
19 #include <nn/Handle.h>
20 #include <nn/Result.h>
21 #include <nn/types.h>
22 #include <nn/util/util_Result.h>
23 #include <nn/fs/fs_Parameters.h>
24 #include <nn/fs/fs_FileSystemBase.h>
25 
26 /*! @file
27     @brief      ファイルおよびディレクトリの作成・削除・リネーム API の宣言
28 */
29 
30 namespace nn {
31 namespace fs {
32 
33 //----------------------------------------
34 //! @name ファイル・ディレクトリ操作
35 //@{
36 
37 /*!
38   @brief        ファイルを削除します。
39 
40   @param[in]    pathName 削除するファイルのパス
41 */
42 void DeleteFile( const wchar_t* pathName );
43 
44 /*!
45   @brief        ファイルを削除します。
46 
47                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
48                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
49 
50   @param[in]    pathName 削除するファイルのパス
51 */
52 void DeleteFile( const char* pathName );
53 
54 /*!
55   @brief        ファイルを削除します。
56 
57                 ファイルを削除する途中でエラーが発生した場合はそのエラーを返します。
58 
59   @param[in]    pathName 削除するファイルのパス
60 
61   @return 処理の結果を返します。
62 */
63 Result TryDeleteFile( const wchar_t* pathName );
64 
65 /*!
66   @brief        ファイルを削除します。
67 
68                 ファイルを削除する途中でエラーが発生した場合はそのエラーを返します。
69 
70                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
71                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
72 
73   @param[in]    pathName 削除するファイルのパス
74 
75   @return 処理の結果を返します。
76 */
77 Result TryDeleteFile( const char* pathName );
78 
79 /*!
80   @brief        ファイルをリネームします。
81 
82   @param[in]    currentPath リネーム元のパス
83   @param[in]    newPath     リネーム先のパス
84 */
85 void RenameFile( const wchar_t* currentPath, const wchar_t* newPath);
86 
87 /*!
88   @brief        ファイルをリネームします。
89 
90                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
91                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
92 
93   @param[in]    currentPath リネーム元のパス
94   @param[in]    newPath     リネーム先のパス
95 */
96 void RenameFile( const char* currentPath, const char* newPath);
97 
98 /*!
99   @brief        ファイルをリネームします。
100 
101                 ファイルをリネームする途中でエラーが発生した場合はそのエラーを返します。
102 
103   @param[in]    currentPath リネーム元のパス
104   @param[in]    newPath     リネーム先のパス
105 
106   @return 処理の結果を返します。
107 */
108 Result TryRenameFile( const wchar_t* currentPath, const wchar_t* newPath);
109 
110 /*!
111   @brief        ファイルをリネームします。
112 
113                 ファイルをリネームする途中でエラーが発生した場合はそのエラーを返します。
114 
115                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
116                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
117 
118   @param[in]    currentPath リネーム元のパス
119   @param[in]    newPath     リネーム先のパス
120 
121   @return 処理の結果を返します。
122 */
123 Result TryRenameFile( const char* currentPath, const char* newPath);
124 
125 /*!
126   @brief        ディレクトリを削除します。
127 
128   @param[in]    pathName 削除するディレクトリのパス
129 */
130 void DeleteDirectory( const wchar_t* pathName );
131 
132 /*!
133   @brief        ディレクトリを削除します。
134 
135                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
136                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
137 
138   @param[in]    pathName 削除するディレクトリのパス
139 */
140 void DeleteDirectory( const char* pathName );
141 
142 /*!
143   @brief        ディレクトリを削除します。
144 
145                 ディレクトリを削除する途中でエラーが発生した場合はそのエラーを返します。
146 
147   @param[in]    pathName 削除するディレクトリのパス
148 
149   @return 処理の結果を返します。
150 */
151 Result TryDeleteDirectory( const wchar_t* pathName );
152 
153 /*!
154   @brief        ディレクトリを削除します。
155 
156                 ディレクトリを削除する途中でエラーが発生した場合はそのエラーを返します。
157 
158                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
159                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
160 
161   @param[in]    pathName 削除するディレクトリのパス
162 
163   @return 処理の結果を返します。
164 */
165 Result TryDeleteDirectory( const char* pathName );
166 
167 /*!
168   @brief        ディレクトリを再帰的に削除します。
169 
170                 ディレクトリを削除する途中でエラーが発生した場合はそのエラーを返します。
171 
172   @param[in]    pathName 削除するディレクトリのパス
173 
174   @return 処理の結果を返します。
175 */
176 Result TryDeleteDirectoryRecursively( const wchar_t* pathName );
177 
178 /*!
179   @brief        ディレクトリを再帰的に削除します。
180 
181                 ディレクトリを削除する途中でエラーが発生した場合はそのエラーを返します。
182                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
183                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
184 
185   @param[in]    pathName 削除するディレクトリのパス
186 
187   @return 処理の結果を返します。
188 */
189 Result TryDeleteDirectoryRecursively( const char* pathName );
190 
191 /*!
192   @brief        ファイルを作成します。
193 
194   @param[in]    pathName 作成するファイルのパス
195   @param[in]    size     作成するファイルのサイズ
196 */
197 void CreateFile( const wchar_t* pathName, s64 size );
198 
199 /*!
200   @brief        ファイルを作成します。
201 
202                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
203                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
204 
205   @param[in]    pathName 作成するファイルのパス
206   @param[in]    size     作成するファイルのサイズ
207 */
208 void CreateFile( const char* pathName, s64 size );
209 
210 /*!
211   @brief        ファイルを作成します。
212 
213                 ファイルを作成する途中でエラーが発生した場合はそのエラーを返します。
214 
215                 ファイルの作成に失敗した場合は、ごみファイルが作成されている可能性があります。@ref TryDeleteFile を呼び出して、
216                 削除を行うようにしてください。そのとき、ごみファイルが作成されていなければ @ref ResultNotFound が返ります。
217 
218   @param[in]    pathName 作成するファイルのパス
219   @param[in]    size     作成するファイルのサイズ
220 
221   @return 処理の結果を返します。
222 */
223 Result TryCreateFile( const wchar_t* pathName, s64 size );
224 
225 /*!
226   @brief        ファイルを作成します。
227 
228                 ファイルを作成する途中でエラーが発生した場合はそのエラーを返します。
229 
230                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
231                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
232 
233                 ファイルの作成に失敗した場合は、ごみファイルが作成されている可能性があります。@ref TryDeleteFile を呼び出して、
234                 削除を行うようにしてください。そのとき、ごみファイルが作成されていなければ @ref ResultNotFound が返ります。
235 
236   @param[in]    pathName 作成するファイルのパス
237   @param[in]    size     作成するファイルのサイズ
238 
239   @return 処理の結果を返します。
240 */
241 Result TryCreateFile( const char* pathName, s64 size );
242 
243 /*!
244   @brief        ディレクトリを作成します。
245 
246   @param[in]    pathName 作成するディレクトリのパス
247 */
248 void CreateDirectory( const wchar_t* pathName );
249 
250 /*!
251   @brief        ディレクトリを作成します。
252 
253                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
254                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
255 
256   @param[in]    pathName 作成するディレクトリのパス
257 */
258 void CreateDirectory( const char* pathName );
259 
260 /*!
261   @brief        ディレクトリを作成します。
262 
263                 ディレクトリを作成する途中でエラーが発生した場合はそのエラーを返します。
264 
265   @param[in]    pathName 作成するディレクトリのパス
266 
267   @return 処理の結果を返します。
268 */
269 Result TryCreateDirectory( const wchar_t* pathName );
270 
271 /*!
272   @brief        ディレクトリを作成します。
273 
274                 ディレクトリを作成する途中でエラーが発生した場合はそのエラーを返します。
275 
276                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
277                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
278 
279   @param[in]    pathName 作成するディレクトリのパス
280 
281   @return 処理の結果を返します。
282 */
283 Result TryCreateDirectory( const char* pathName );
284 
285 /*!
286   @brief        ディレクトリをリネームします。
287 
288   @param[in]    currentPath リネーム元のパス
289   @param[in]    newPath     リネーム先のパス
290 */
291 void RenameDirectory( const wchar_t* currentPath, const wchar_t* newPath);
292 
293 /*!
294   @brief        ディレクトリをリネームします。
295 
296                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
297                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
298 
299   @param[in]    currentPath リネーム元のパス
300   @param[in]    newPath     リネーム先のパス
301 */
302 void RenameDirectory( const char* currentPath, const char* newPath);
303 
304 /*!
305   @brief        ディレクトリをリネームします。
306 
307                 ディレクトリをリネームする途中でエラーが発生した場合はそのエラーを返します。
308 
309   @param[in]    currentPath リネーム元のパス
310   @param[in]    newPath     リネーム先のパス
311 
312   @return 処理の結果を返します。
313 */
314 Result TryRenameDirectory( const wchar_t* currentPath, const wchar_t* newPath);
315 
316 /*!
317   @brief        ディレクトリをリネームします。
318 
319                 ディレクトリをリネームする途中でエラーが発生した場合はそのエラーを返します。
320 
321                 この関数では、内部でパス名をマルチバイト文字列からワイド文字列に変換するために、
322                 大きくスタック上にバッファを取るので、スタックの大きさには注意してください。
323 
324   @param[in]    currentPath リネーム元のパス
325   @param[in]    newPath     リネーム先のパス
326 
327   @return 処理の結果を返します。
328 */
329 Result TryRenameDirectory( const char* currentPath, const char* newPath);
330 
331 //@}
332 
DeleteFile(const wchar_t * pathName)333 inline void DeleteFile(const wchar_t* pathName)
334 {
335     detail::GetGlobalFileSystemBase().DeleteFile(pathName);
336 }
DeleteFile(const char * pathName)337 inline void DeleteFile(const char* pathName)
338 {
339     detail::GetGlobalFileSystemBase().DeleteFile(pathName);
340 }
TryDeleteFile(const wchar_t * pathName)341 inline Result TryDeleteFile(const wchar_t* pathName)
342 {
343     return detail::GetGlobalFileSystemBase().TryDeleteFile(pathName);
344 }
TryDeleteFile(const char * pathName)345 inline Result TryDeleteFile(const char* pathName)
346 {
347     return detail::GetGlobalFileSystemBase().TryDeleteFile(pathName);
348 }
349 
RenameFile(const wchar_t * currentPath,const wchar_t * newPath)350 inline void RenameFile( const wchar_t* currentPath, const wchar_t* newPath)
351 {
352     detail::GetGlobalFileSystemBase().RenameFile(currentPath, newPath);
353 }
RenameFile(const char * currentPath,const char * newPath)354 inline void RenameFile( const char* currentPath, const char* newPath)
355 {
356     detail::GetGlobalFileSystemBase().RenameFile(currentPath, newPath);
357 }
TryRenameFile(const wchar_t * currentPath,const wchar_t * newPath)358 inline Result TryRenameFile( const wchar_t* currentPath, const wchar_t* newPath)
359 {
360     return detail::GetGlobalFileSystemBase().TryRenameFile(currentPath, newPath);
361 }
TryRenameFile(const char * currentPath,const char * newPath)362 inline Result TryRenameFile( const char* currentPath, const char* newPath)
363 {
364     return detail::GetGlobalFileSystemBase().TryRenameFile(currentPath, newPath);
365 }
366 
DeleteDirectory(const wchar_t * pathName)367 inline void DeleteDirectory(const wchar_t* pathName)
368 {
369     detail::GetGlobalFileSystemBase().DeleteDirectory(pathName);
370 }
DeleteDirectory(const char * pathName)371 inline void DeleteDirectory(const char* pathName)
372 {
373     detail::GetGlobalFileSystemBase().DeleteDirectory(pathName);
374 }
DeleteDirectoryRecursively(const wchar_t * pathName)375 inline void DeleteDirectoryRecursively(const wchar_t* pathName)
376 {
377     detail::GetGlobalFileSystemBase().DeleteDirectoryRecursively(pathName);
378 }
DeleteDirectoryRecursively(const char * pathName)379 inline void DeleteDirectoryRecursively(const char* pathName)
380 {
381     detail::GetGlobalFileSystemBase().DeleteDirectoryRecursively(pathName);
382 }
TryDeleteDirectory(const wchar_t * pathName)383 inline Result TryDeleteDirectory(const wchar_t* pathName)
384 {
385     return detail::GetGlobalFileSystemBase().TryDeleteDirectory(pathName);
386 }
TryDeleteDirectory(const char * pathName)387 inline Result TryDeleteDirectory(const char* pathName)
388 {
389     return detail::GetGlobalFileSystemBase().TryDeleteDirectory(pathName);
390 }
TryDeleteDirectoryRecursively(const wchar_t * pathName)391 inline Result TryDeleteDirectoryRecursively(const wchar_t* pathName)
392 {
393     return detail::GetGlobalFileSystemBase().TryDeleteDirectoryRecursively(pathName);
394 }
TryDeleteDirectoryRecursively(const char * pathName)395 inline Result TryDeleteDirectoryRecursively(const char* pathName)
396 {
397     return detail::GetGlobalFileSystemBase().TryDeleteDirectoryRecursively(pathName);
398 }
399 
CreateFile(const wchar_t * pathName,s64 size)400 inline void CreateFile(const wchar_t* pathName, s64 size)
401 {
402     detail::GetGlobalFileSystemBase().CreateFile(pathName, size);
403 }
CreateFile(const char * pathName,s64 size)404 inline void CreateFile(const char* pathName, s64 size)
405 {
406     detail::GetGlobalFileSystemBase().CreateFile(pathName, size);
407 }
TryCreateFile(const wchar_t * pathName,s64 size)408 inline Result TryCreateFile(const wchar_t* pathName, s64 size)
409 {
410     return detail::GetGlobalFileSystemBase().TryCreateFile(pathName, size);
411 }
TryCreateFile(const char * pathName,s64 size)412 inline Result TryCreateFile(const char* pathName, s64 size)
413 {
414     return detail::GetGlobalFileSystemBase().TryCreateFile(pathName, size);
415 }
416 
CreateDirectory(const wchar_t * pathName)417 inline void CreateDirectory(const wchar_t* pathName)
418 {
419     detail::GetGlobalFileSystemBase().CreateDirectory(pathName);
420 }
CreateDirectory(const char * pathName)421 inline void CreateDirectory(const char* pathName)
422 {
423     detail::GetGlobalFileSystemBase().CreateDirectory(pathName);
424 }
TryCreateDirectory(const wchar_t * pathName)425 inline Result TryCreateDirectory(const wchar_t* pathName)
426 {
427     return detail::GetGlobalFileSystemBase().TryCreateDirectory(pathName);
428 }
TryCreateDirectory(const char * pathName)429 inline Result TryCreateDirectory(const char* pathName)
430 {
431     return detail::GetGlobalFileSystemBase().TryCreateDirectory(pathName);
432 }
433 
RenameDirectory(const wchar_t * currentPath,const wchar_t * newPath)434 inline void RenameDirectory( const wchar_t* currentPath, const wchar_t* newPath)
435 {
436     detail::GetGlobalFileSystemBase().RenameDirectory(currentPath, newPath);
437 }
RenameDirectory(const char * currentPath,const char * newPath)438 inline void RenameDirectory( const char* currentPath, const char* newPath)
439 {
440     detail::GetGlobalFileSystemBase().RenameDirectory(currentPath, newPath);
441 }
TryRenameDirectory(const wchar_t * currentPath,const wchar_t * newPath)442 inline Result TryRenameDirectory( const wchar_t* currentPath, const wchar_t* newPath)
443 {
444     return detail::GetGlobalFileSystemBase().TryRenameDirectory(currentPath, newPath);
445 }
TryRenameDirectory(const char * currentPath,const char * newPath)446 inline Result TryRenameDirectory( const char* currentPath, const char* newPath)
447 {
448     return detail::GetGlobalFileSystemBase().TryRenameDirectory(currentPath, newPath);
449 }
450 
451 }
452 }
453 #endif  // ifndef NN_FS_FS_FILESYSTEM_H_
454