fix:修正utf环境编译。

This commit is contained in:
taynpg 2025-02-18 23:45:13 +08:00
parent 3b5afa0661
commit c9ab756852

View File

@ -204,52 +204,55 @@ ofString COfPath::to_full(const ofString& path)
ofStrVec COfPath::match_files(const ofString& path)
{
#ifdef UNICODE_OFSTR
ofStrVec ret;
// 使用宽字符版本的 fs::path
std::filesystem::path in(path);
std::filesystem::path parent_path = in.parent_path();
ofString filename_pattern = in.filename().native(); // 使用 native() 获取正确的字符类型
fs::path in(path);
fs::path parent_path = in.parent_path();
ofString filename_pattern = in.filename().wstring();
if (parent_path.empty()) {
parent_path = std::filesystem::current_path();
parent_path = fs::current_path();
}
// 根据 UNICODE_OFSTR 选择正确的正则表达式类型
#ifdef UNICODE_OFSTR
std::wregex file_regex;
ofString regex_pattern = std::regex_replace(filename_pattern, std::wregex(ofT(R"(\*)")), ofT(".*"));
regex_pattern = std::regex_replace(regex_pattern, std::wregex(ofT(R"(\?)")), ofT("."));
#else
std::regex file_regex;
std::string regex_pattern = std::regex_replace(filename_pattern, std::regex(R"(\*)"), ".*");
regex_pattern = std::regex_replace(regex_pattern, std::regex(R"(\?)"), ".");
#endif
try {
#ifdef UNICODE_OFSTR
file_regex = std::wregex(regex_pattern);
#else
file_regex = std::regex(regex_pattern);
#endif
// 遍历目录
for (const auto& entry : std::filesystem::directory_iterator(parent_path)) {
#ifdef UNICODE_OFSTR
for (const auto& entry : fs::directory_iterator(parent_path)) {
if (std::regex_match(entry.path().filename().wstring(), file_regex)) {
ret.push_back(entry.path().wstring());
}
#else
if (std::regex_match(entry.path().filename().string(), file_regex)) {
ret.push_back(entry.path().string());
}
#endif
}
return ret;
} catch (const std::exception& e) {
ret.clear();
return ret;
}
#else
ofStrVec ret;
fs::path in(path);
fs::path parent_path = in.parent_path();
ofString filename_pattern = in.filename().string();
if (parent_path.empty()) {
parent_path = fs::current_path();
}
std::regex file_regex;
std::string regex_pattern = std::regex_replace(filename_pattern, std::regex(R"(\*)"), ".*");
regex_pattern = std::regex_replace(regex_pattern, std::regex(R"(\?)"), ".");
try {
file_regex = std::regex(regex_pattern);
for (const auto& entry : fs::directory_iterator(parent_path)) {
if (std::regex_match(entry.path().filename().string(), file_regex)) {
ret.push_back(entry.path().string());
}
}
return ret;
} catch (const std::exception& e) {
ret.clear();
return ret;
}
#endif
}
} // namespace ofen