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