add:添加字符串分割。
This commit is contained in:
parent
0f7a8d3c92
commit
1427bf4bca
@ -11,15 +11,14 @@ public:
|
|||||||
~COfPath();
|
~COfPath();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static bool isSamePath(const ofString& pa, const ofString& pb);
|
static bool is_same_path(const ofString& pa, const ofString& pb);
|
||||||
static ofString normalizePath(const ofString& path);
|
static ofString normalize(const ofString& path);
|
||||||
static ofString replaceStr(const ofString& str, const ofString& from, const ofString& to);
|
static ofString get_full_path();
|
||||||
static ofString getFullRunPath();
|
static ofString get_home();
|
||||||
static ofString getHome();
|
static ofString get_config_dir(const ofString& sub_dir, bool create = false);
|
||||||
static ofString getConfigDir(const ofString& sub_dir, bool create = false);
|
static ofString get_full(const ofString& path, const ofString& sub_file_path);
|
||||||
static ofString getFull(const ofString& path, const ofString& sub_file_path);
|
static bool exist(const ofString& path);
|
||||||
static bool isExist(const ofString& path);
|
static bool write(const ofString& path, const char* data, int len);
|
||||||
static bool writeBin(const ofString& path, const char* data, int len);
|
|
||||||
};
|
};
|
||||||
}; // namespace ofen
|
}; // namespace ofen
|
||||||
#endif
|
#endif
|
@ -2,6 +2,7 @@
|
|||||||
#define OFEN_STRING_HEADER
|
#define OFEN_STRING_HEADER
|
||||||
|
|
||||||
#include "of_def.hpp"
|
#include "of_def.hpp"
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
namespace ofen {
|
namespace ofen {
|
||||||
class COfStr
|
class COfStr
|
||||||
@ -9,6 +10,9 @@ class COfStr
|
|||||||
public:
|
public:
|
||||||
COfStr();
|
COfStr();
|
||||||
~COfStr();
|
~COfStr();
|
||||||
|
public:
|
||||||
|
static ofString replace(const ofString& str, const ofString& from, const ofString& to);
|
||||||
|
static std::vector<ofString> split(const ofString& input, const ofString& delimiter);
|
||||||
};
|
};
|
||||||
}; // namespace ofen
|
}; // namespace ofen
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
#include "of_path.h"
|
#include "of_path.h"
|
||||||
#include <filesystem>
|
#include <filesystem>
|
||||||
#include <fstream>
|
#include <fstream>
|
||||||
|
#include "of_str.h"
|
||||||
|
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -25,34 +26,20 @@ COfPath::~COfPath()
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
bool COfPath::isSamePath(const ofString& pa, const ofString& pb)
|
bool COfPath::is_same_path(const ofString& pa, const ofString& pb)
|
||||||
{
|
{
|
||||||
return normalizePath(pa) == normalizePath(pb);
|
return normalize(pa) == normalize(pb);
|
||||||
}
|
}
|
||||||
|
|
||||||
ofString COfPath::normalizePath(const ofString& path)
|
ofString COfPath::normalize(const ofString& path)
|
||||||
{
|
{
|
||||||
ofString normalized = replaceStr(path, ofT("\\"), ofT("/"));
|
ofString normalized = COfStr::replace(path, ofT("\\"), ofT("/"));
|
||||||
if (!normalized.empty() && normalized.back() == ofT('/')) {
|
if (!normalized.empty() && normalized.back() == ofT('/')) {
|
||||||
normalized.pop_back();
|
normalized.pop_back();
|
||||||
}
|
}
|
||||||
return normalized;
|
return normalized;
|
||||||
}
|
}
|
||||||
|
ofString COfPath::get_full_path()
|
||||||
ofString COfPath::replaceStr(const ofString& str, const ofString& from, const ofString& to)
|
|
||||||
{
|
|
||||||
if (from.empty()) {
|
|
||||||
return str;
|
|
||||||
}
|
|
||||||
ofString result = str;
|
|
||||||
size_t startPos = 0;
|
|
||||||
while ((startPos = result.find(from, startPos)) != ofString::npos) {
|
|
||||||
result.replace(startPos, from.length(), to);
|
|
||||||
startPos += to.length();
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
ofString COfPath::getFullRunPath()
|
|
||||||
{
|
{
|
||||||
ofString path;
|
ofString path;
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
@ -81,7 +68,7 @@ ofString COfPath::getFullRunPath()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
ofString COfPath::getHome()
|
ofString COfPath::get_home()
|
||||||
{
|
{
|
||||||
#if defined(_WIN32)
|
#if defined(_WIN32)
|
||||||
ofChar* value = nullptr;
|
ofChar* value = nullptr;
|
||||||
@ -107,9 +94,9 @@ ofString COfPath::getHome()
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
ofString COfPath::getConfigDir(const ofString& sub_dir, bool create)
|
ofString COfPath::get_config_dir(const ofString& sub_dir, bool create)
|
||||||
{
|
{
|
||||||
fs::path userHome = fs::path(getHome());
|
fs::path userHome = fs::path(get_home());
|
||||||
userHome.append(".config");
|
userHome.append(".config");
|
||||||
userHome.append(sub_dir);
|
userHome.append(sub_dir);
|
||||||
if (create) {
|
if (create) {
|
||||||
@ -124,7 +111,7 @@ ofString COfPath::getConfigDir(const ofString& sub_dir, bool create)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
ofString COfPath::getFull(const ofString& path, const ofString& sub_file_path)
|
ofString COfPath::get_full(const ofString& path, const ofString& sub_file_path)
|
||||||
{
|
{
|
||||||
fs::path p(path);
|
fs::path p(path);
|
||||||
p.append(sub_file_path);
|
p.append(sub_file_path);
|
||||||
@ -135,13 +122,13 @@ ofString COfPath::getFull(const ofString& path, const ofString& sub_file_path)
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
bool COfPath::isExist(const ofString& path)
|
bool COfPath::exist(const ofString& path)
|
||||||
{
|
{
|
||||||
fs::path p(path);
|
fs::path p(path);
|
||||||
return fs::exists(p);
|
return fs::exists(p);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool COfPath::writeBin(const ofString& path, const char* data, int len)
|
bool COfPath::write(const ofString& path, const char* data, int len)
|
||||||
{
|
{
|
||||||
std::ofstream file(path, std::ios::binary);
|
std::ofstream file(path, std::ios::binary);
|
||||||
if (!file.is_open()) {
|
if (!file.is_open()) {
|
||||||
|
@ -7,4 +7,28 @@ COfStr::COfStr()
|
|||||||
COfStr::~COfStr()
|
COfStr::~COfStr()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
ofString COfStr::replace(const ofString& str, const ofString& from, const ofString& to)
|
||||||
|
{
|
||||||
|
if (from.empty()) {
|
||||||
|
return str;
|
||||||
|
}
|
||||||
|
ofString result = str;
|
||||||
|
size_t startPos = 0;
|
||||||
|
while ((startPos = result.find(from, startPos)) != ofString::npos) {
|
||||||
|
result.replace(startPos, from.length(), to);
|
||||||
|
startPos += to.length();
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
std::vector<ofString> COfStr::split(const ofString& input, const ofString& delimiter)
|
||||||
|
{
|
||||||
|
std::vector<ofString> result;
|
||||||
|
size_t pos = 0, prev = 0;
|
||||||
|
while ((pos = input.find(delimiter, prev)) != ofString::npos) {
|
||||||
|
result.push_back(input.substr(prev, pos - prev));
|
||||||
|
prev = pos + delimiter.size(); // Move past the delimiter
|
||||||
|
}
|
||||||
|
result.push_back(input.substr(prev));
|
||||||
|
return result;
|
||||||
|
}
|
||||||
} // namespace ofen
|
} // namespace ofen
|
||||||
|
@ -6,15 +6,15 @@ using namespace ofen;
|
|||||||
|
|
||||||
void testA()
|
void testA()
|
||||||
{
|
{
|
||||||
assert(COfPath::isSamePath(ofT("D:/Java"), ofT("D:\\Java\\")));
|
assert(COfPath::is_same_path(ofT("D:/Java"), ofT("D:\\Java\\")));
|
||||||
}
|
}
|
||||||
|
|
||||||
void testB()
|
void testB()
|
||||||
{
|
{
|
||||||
auto home = COfPath::getHome();
|
auto home = COfPath::get_home();
|
||||||
assert(!home.empty());
|
assert(!home.empty());
|
||||||
|
|
||||||
auto rp = COfPath::replaceStr(ofT("cpp/z"), ofT("p/"), ofT("Ni"));
|
auto rp = COfPath::replace(ofT("cpp/z"), ofT("p/"), ofT("Ni"));
|
||||||
assert(rp == ofT("cpNiz"));
|
assert(rp == ofT("cpNiz"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user