bool File::MoveDirectory(const MistString& src, const MistString& dst) { #if defined(MIST_OS_WINDOWS) return ::MoveFileW(src.c_str(), dst.c_str()) == TRUE; #elif defined(MIST_OS_FAMILY_APPLE) return mist_apple_moveitem(src, dst); #elif defined(MIST_OS_FAMILY_UNIX) return ::rename(string::WStringToString(src).c_str(), string::WStringToString(dst).c_str()) == 0; #endif }
MistString Path::GetEnv(const MistString& env) { #if defined(MIST_OS_WINDOWS) DWORD len = GetEnvironmentVariableW(env.c_str(), 0, 0); if (len != 0) { wchar_t* buffer = new wchar_t[len]; GetEnvironmentVariableW(env.c_str(), buffer, len); MistString result(buffer); delete [] buffer; return result; } #elif defined(MIST_OS_FAMILY_UNIX) return string::StringToWStringFast(getenv(string::WStringToString(env).c_str())); #endif return MistString(); }
bool File::CopyFile(const MistString& src, const MistString& dst) { #if defined(MIST_OS_WINDOWS) return ::CopyFileW(src.c_str(), dst.c_str(), FALSE) == TRUE; #elif defined(MIST_OS_FAMILY_APPLE) return mist_apple_copyitem(src, dst); #elif defined(MIST_OS_FAMILY_UNIX) return mist_generic_cp_mv("/bin/cp", string::WStringToString(src).c_str(), string::WStringToString(dst).c_str()); #endif }
bool File::DeleteDirectory(const MistString& src) { #if defined(MIST_OS_WINDOWS) return ::RemoveDirectoryW(src.c_str()) == TRUE; #elif defined(MIST_OS_FAMILY_APPLE) return mist_apple_deleteitem(src); #elif defined(MIST_OS_FAMILY_UNIX) return mist_generic_rm(string::WStringToString(src).c_str(), true); #endif }
bool File::DeleteFile(const MistString& src) { #if defined(MIST_OS_WINDOWS) return ::DeleteFileW(src.c_str()) == TRUE; #elif defined(MIST_OS_FAMILY_APPLE) return mist_apple_deleteitem(src); #elif defined(MIST_OS_FAMILY_UNIX) return ::remove(string::WStringToString(src).cstr()) == 0; #endif }
bool File::CopyDirectory(const MistString& src, const MistString& dst) { #if defined(MIST_OS_WINDOWS) SHFILEOPSTRUCT s = { 0 }; s.hwnd = 0; s.wFunc = FO_COPY; s.fFlags = FOF_SILENT; s.pTo = dst.c_str(); s.pFrom = src.c_str(); return SHFileOperation(&s) == 0; #elif defined(MIST_OS_FAMILY_APPLE) return mist_apple_copyitem(src, dst); #elif defined(MIST_OS_FAMILY_UNIX) return mist_generic_cp_mv("/bin/cp", string::WStringToString(src).c_str(), string::WStringToString(dst).c_str(), true); #endif }
bool File::PathExists(const MistString& path) { #ifdef MIST_OS_WINDOWS return PathFileExistsW(path.c_str())?true:false; #else struct stat sb; if (stat(string::WStringToString(path).c_str(), &sb) == 0 && S_ISDIR(sb.st_mode)) { return true; } #endif return false; }
DirectoryIteratorImpl(const MistString& path) { MistString findPath = path + L"/*"; mFH = FindFirstFileW(findPath.c_str(), &mFD); if(mFH == INVALID_HANDLE_VALUE) { DWORD error = GetLastError(); if(error != ERROR_NO_MORE_FILES) { } } else { mCurrent = mFD.cFileName; if(mCurrent == L"." || mCurrent == L"..") next(); } }
bool File::CreateDirectory(const MistString& dir){ #if defined(MIST_OS_WINDOWS) return ::CreateDirectoryW(dir.c_str(), NULL) == TRUE; #elif defined(MIST_OS_FAMILY_APPLE) return mist_apple_createdirectory(dir); #elif defined(MIST_OS_FAMILY_UNIX) return mkdir(string::WStringToString(dir).c_str(), S_IRWXU) == 0; #endif }
bool File::FileExists(const MistString& filepath) { #ifdef MIST_OS_WINDOWS return PathFileExistsW(filepath.c_str())?true:false; #elif defined(MIST_OS_FAMILY_APPLE) return mist_apple_file_exists(filepath); #else struct stat sb; if (stat(Miststring::WStringToString(filepath).c_str(), &sb) == 0 && S_ISREG(sb.st_mode)) { return true; } #endif return false; }
MistString Path::ExpandPath(const MistString& path) { #if defined(MIST_OS_WINDOWS) wchar_t buffer[_MAX_PATH]; DWORD n = ExpandEnvironmentStringsW(path.c_str(), buffer, sizeof(buffer)); if(n > 0 && n < sizeof(buffer)) { return MistString(buffer, n-1); } else return path; #elif defined(MIST_OS_FAMILY_UNIX) MistString result; MistString::const_iterator it = path.begin(); MistString::const_iterator end = path.end(); if (it != end && *it == L'~') { ++it; if (it != end && *it == L'/') { result += Path::GetHome(); ++it; } else result += '~'; } while (it != end) { if (*it == L'$') { std::wstring var; ++it; if (it != end && *it == L'{') { ++it; while (it != end && *it != L'}') var += *it++; if (it != end) ++it; } else { while (it != end && (((*it >= L'a' && *it <= L'z') || (*it >= L'A' && *it <= L'Z') || (*it >= L'0' && *it <= L'9')) || *it == L'_')) var += *it++; } result += Path::GetEnv(var); } else result += *it++; } return result; #endif }