OSDN Git Service

initial files
[iptd/iPTd_R3.git] / src / Raym / FileManager.cpp
1 //\r
2 // FileManager.cpp\r
3 //\r
4 \r
5 #include <sys/stat.h>\r
6 #include <direct.h>\r
7 \r
8 #define DBG_LEVEL 0\r
9 #include "Raym/Log.h"\r
10 #include "Raym/Raym.h"\r
11 \r
12 \r
13 namespace Raym\r
14 {\r
15 \r
16 DEFINE_STATIC_MUTEX(mutex_);\r
17 static FileManager *defaultManager_ = NULL;\r
18 \r
19 FileManager::FileManager()\r
20 {\r
21     DebugLog2("FileManager::FileManager()");\r
22 }\r
23 \r
24 FileManager::~FileManager()\r
25 {\r
26     DebugLog2("FileManager::~FileManager()");\r
27 }\r
28 \r
29 FileManager *FileManager::defaultManager()\r
30 {\r
31     DebugLog2("FileManager::defaultManager()");\r
32 \r
33     mutex_.lock();\r
34     if (defaultManager_ == NULL)\r
35     {\r
36         defaultManager_ = new FileManager();\r
37         ((Object *)defaultManager_)->init();\r
38         ((Object *)defaultManager_)->autorelease(true);\r
39     }\r
40     mutex_.unlock();\r
41 \r
42     return defaultManager_;\r
43 }\r
44 \r
45 bool FileManager::fileExistsAtPath(String *path, bool *isDirectory)\r
46 {\r
47     DebugLog2("FileManager::fileExistsAtPath(path,isDirectory)");\r
48 \r
49     bool result = false;\r
50     if (path != NULL)\r
51     {\r
52 #ifdef _WIN32\r
53         struct __stat64 buffer;\r
54         if (_stat64(path->cString(), &buffer) == 0)\r
55         {\r
56             result = true;\r
57             if (isDirectory != NULL)\r
58             {\r
59                 *isDirectory = ((buffer.st_mode & _S_IFDIR) == _S_IFDIR);\r
60             }\r
61         }\r
62 #else\r
63 #endif\r
64     }\r
65     return result;\r
66 }\r
67 \r
68 bool FileManager::fileExistsAtPath(const char *path, bool *isDirectory)\r
69 {\r
70     DebugLog2("FileManager::fileExistsAtPath(path,isDirectory)");\r
71 \r
72     bool result = false;\r
73     if ((path != NULL) && (isDirectory != NULL))\r
74     {\r
75         result = fileExistsAtPath(String::stringWithUTF8String(path), isDirectory);\r
76     }\r
77     return result;\r
78 }\r
79 \r
80 bool FileManager::removeItemAtPath(String *path, Error **error)\r
81 {\r
82     DebugLog2("FileManager::removeItemAtPath()");\r
83 \r
84     bool result = false;\r
85     if (path != NULL)\r
86     {\r
87         bool isDir = false;\r
88         if (fileExistsAtPath(path, &isDir))\r
89         {\r
90             if (isDir)\r
91             {\r
92                 result = (_rmdir(path->cString()) == 0);\r
93             }\r
94             else\r
95             {\r
96                 result = (remove(path->cString()) == 0);\r
97             }\r
98         }\r
99     }\r
100     return result;\r
101 }\r
102 \r
103 const char *FileManager::className()\r
104 {\r
105     return "FileManager";\r
106 }\r
107 \r
108 int FileManager::freeSpaceForPath(String *path)\r
109 {\r
110     int result = -1;\r
111     TCHAR tpath[MAX_PATH + 1]; \r
112 \r
113     errno_t e;\r
114     size_t returnValue;\r
115     e = mbstowcs_s(&returnValue, tpath, sizeof(tpath), path->cString(), _TRUNCATE);\r
116     if (e == 0)\r
117     {\r
118         ULARGE_INTEGER freeBytesAvailable;\r
119         ULARGE_INTEGER totalNumberOfBytes;\r
120         if (GetDiskFreeSpaceEx(tpath, &freeBytesAvailable, &totalNumberOfBytes, NULL))\r
121         {\r
122             result = (int)(freeBytesAvailable.QuadPart / 1024 / 1024 / 1024);\r
123         }\r
124     }\r
125     return result;\r
126 }\r
127 \r
128 } // Raym\r