path:补充家目录相关函数。
This commit is contained in:
parent
50f455bd23
commit
0b760f5363
@ -16,6 +16,10 @@ public:
|
|||||||
static ofString replaceStr(const ofString& str, const ofString& from, const ofString& to);
|
static ofString replaceStr(const ofString& str, const ofString& from, const ofString& to);
|
||||||
static ofString getFullRunPath();
|
static ofString getFullRunPath();
|
||||||
static ofString getHome();
|
static ofString getHome();
|
||||||
|
static ofString getConfigDir(const ofString& sub_dir, bool create = false);
|
||||||
|
static ofString getFull(const ofString& path, const ofString& sub_file_path);
|
||||||
|
static bool isExist(const ofString& path);
|
||||||
|
static bool writeBin(const ofString& path, const char* data, int len);
|
||||||
};
|
};
|
||||||
}; // namespace ofen
|
}; // namespace ofen
|
||||||
#endif
|
#endif
|
@ -1,5 +1,6 @@
|
|||||||
#include "of_path.h"
|
#include "of_path.h"
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
|
#include <fstream>
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -64,7 +65,7 @@ ofString COfPath::getFullRunPath()
|
|||||||
#elif defined(__clang__) && defined(__APPLE__)
|
#elif defined(__clang__) && defined(__APPLE__)
|
||||||
uint32_t size = 0;
|
uint32_t size = 0;
|
||||||
_NSGetExecutablePath(NULL, &size); // 获取路径缓冲区的大小
|
_NSGetExecutablePath(NULL, &size); // 获取路径缓冲区的大小
|
||||||
std::vector<ofChar> buffer(size); // 创建缓冲区
|
std::vector<ofChar> buffer(size); // 创建缓冲区
|
||||||
if (_NSGetExecutablePath(buffer.data(), &size) != 0) {
|
if (_NSGetExecutablePath(buffer.data(), &size) != 0) {
|
||||||
return ofT("");
|
return ofT("");
|
||||||
}
|
}
|
||||||
@ -85,17 +86,20 @@ ofString COfPath::getHome()
|
|||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
ofChar* value = nullptr;
|
ofChar* value = nullptr;
|
||||||
std::size_t len = 0;
|
std::size_t len = 0;
|
||||||
|
#ifdef UNICODE_OFSTR
|
||||||
|
auto err = _wdupenv_s(&value, &len, ofT("USERPROFILE"));
|
||||||
|
#else
|
||||||
auto err = _dupenv_s(&value, &len, "USERPROFILE");
|
auto err = _dupenv_s(&value, &len, "USERPROFILE");
|
||||||
|
#endif
|
||||||
if (err == 0 && value != nullptr) {
|
if (err == 0 && value != nullptr) {
|
||||||
ofString ret(value);
|
ofString ret(value);
|
||||||
free(value);
|
free(value);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
return ofT("");
|
return ofT("");
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
ofChar *homedir = getenv("HOME");
|
ofChar* homedir = getenv("HOME");
|
||||||
if (homedir) {
|
if (homedir) {
|
||||||
return ofString(homedir);
|
return ofString(homedir);
|
||||||
}
|
}
|
||||||
@ -103,4 +107,49 @@ ofString COfPath::getHome()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ofString COfPath::getConfigDir(const ofString& sub_dir, bool create)
|
||||||
|
{
|
||||||
|
fs::path userHome = fs::path(getHome());
|
||||||
|
userHome.append(".config");
|
||||||
|
userHome.append(sub_dir);
|
||||||
|
if (create) {
|
||||||
|
if (!fs::exists(userHome)) {
|
||||||
|
fs::create_directories(userHome);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef UNICODE_OFSTR
|
||||||
|
return ofString(userHome.wstring());
|
||||||
|
#else
|
||||||
|
return ofString(userHome.string());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
ofString COfPath::getFull(const ofString& path, const ofString& sub_file_path)
|
||||||
|
{
|
||||||
|
fs::path p(path);
|
||||||
|
p.append(sub_file_path);
|
||||||
|
#ifdef UNICODE_OFSTR
|
||||||
|
return ofString(p.wstring());
|
||||||
|
#else
|
||||||
|
return ofString(p.string());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
bool COfPath::isExist(const ofString& path)
|
||||||
|
{
|
||||||
|
fs::path p(path);
|
||||||
|
return fs::exists(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool COfPath::writeBin(const ofString& path, const char* data, int len)
|
||||||
|
{
|
||||||
|
std::ofstream file(path, std::ios::binary);
|
||||||
|
if (!file.is_open()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
file.write(data, len);
|
||||||
|
file.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ofen
|
} // namespace ofen
|
||||||
|
@ -24,18 +24,18 @@ OfStatus COfWin::appendPathVariable(const ofString& path)
|
|||||||
return STA_CANOT_OPEN_REG;
|
return STA_CANOT_OPEN_REG;
|
||||||
}
|
}
|
||||||
DWORD bufferSize = 0;
|
DWORD bufferSize = 0;
|
||||||
if (RegQueryValueEx(hKey, "Path", nullptr, nullptr, nullptr, &bufferSize) != ERROR_SUCCESS) {
|
if (RegQueryValueEx(hKey, ofT("Path"), nullptr, nullptr, nullptr, &bufferSize) != ERROR_SUCCESS) {
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
return STA_CANOT_QUERY_REG;
|
return STA_CANOT_QUERY_REG;
|
||||||
}
|
}
|
||||||
ofString currentPath(bufferSize, ofT('\0'));
|
ofString currentPath(bufferSize, ofT('\0'));
|
||||||
if (RegQueryValueEx(hKey, "Path", nullptr, nullptr, reinterpret_cast<LPBYTE>(¤tPath[0]), &bufferSize) != ERROR_SUCCESS) {
|
if (RegQueryValueEx(hKey, ofT("Path"), nullptr, nullptr, reinterpret_cast<LPBYTE>(¤tPath[0]), &bufferSize) != ERROR_SUCCESS) {
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
return STA_CANOT_QUERY_REG;
|
return STA_CANOT_QUERY_REG;
|
||||||
}
|
}
|
||||||
currentPath.resize(bufferSize - 1);
|
currentPath.resize(bufferSize - 1);
|
||||||
ofString updatedPath = currentPath + ofT(";") + path;
|
ofString updatedPath = currentPath + ofT(";") + path;
|
||||||
if (RegSetValueEx(hKey, "Path", 0, REG_EXPAND_SZ, reinterpret_cast<const BYTE*>(updatedPath.c_str()), updatedPath.size() + 1) != ERROR_SUCCESS) {
|
if (RegSetValueEx(hKey, ofT("Path"), 0, REG_EXPAND_SZ, reinterpret_cast<const BYTE*>(updatedPath.c_str()), updatedPath.size() + 1) != ERROR_SUCCESS) {
|
||||||
RegCloseKey(hKey);
|
RegCloseKey(hKey);
|
||||||
return STA_CANOT_SET_REG;
|
return STA_CANOT_SET_REG;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user