108 lines
3.2 KiB
C++
108 lines
3.2 KiB
C++
// Copyright Epic Games, Inc. All Rights Reserved.
|
|
|
|
#include "manageTextFileBPLibrary.h"
|
|
#include "Kismet/KismetStringLibrary.h"
|
|
#include "manageTextFile.h"
|
|
|
|
UmanageTextFileBPLibrary::UmanageTextFileBPLibrary(const FObjectInitializer& ObjectInitializer)
|
|
: Super(ObjectInitializer)
|
|
{
|
|
|
|
}
|
|
|
|
bool UmanageTextFileBPLibrary::CreateTextFile(FString Path, FString FileName, FString Text)
|
|
{
|
|
if (Path == "" || FileName == "") {
|
|
UE_LOG(LogTemp, Warning, TEXT("Empty Path or FileName, aborting"));
|
|
return false;
|
|
}
|
|
Path.ReplaceInline(TEXT("/"), TEXT("\\"));
|
|
FString fullpath(Path + "\\" + FileName);
|
|
return FFileHelper::SaveStringToFile(Text, *fullpath, FFileHelper::EEncodingOptions::ForceUTF8);
|
|
}
|
|
|
|
bool UmanageTextFileBPLibrary::AppendStringToFile(FString Path, FString FileName, FString Text)
|
|
{
|
|
if (Path == "" || FileName == "") {
|
|
UE_LOG(LogTemp, Warning, TEXT("Empty Path or FileName, aborting"));
|
|
return false;
|
|
}
|
|
Path.ReplaceInline(TEXT("/"), TEXT("\\"));
|
|
FString fullpath(Path + "\\" + FileName);
|
|
|
|
FString OldText;
|
|
if (FPaths::FileExists(fullpath))
|
|
{
|
|
FFileHelper::LoadFileToString(OldText, *fullpath);
|
|
OldText += Text;
|
|
return FFileHelper::SaveStringToFile(Text, *fullpath, FFileHelper::EEncodingOptions::ForceUTF8, &IFileManager::Get(), FILEWRITE_Append);
|
|
}
|
|
else
|
|
{
|
|
return CreateTextFile(Path, FileName, Text);
|
|
}
|
|
}
|
|
|
|
bool UmanageTextFileBPLibrary::FileExists(FString Path, FString FileName)
|
|
{
|
|
if (Path == "" || FileName == "") {
|
|
UE_LOG(LogTemp, Warning, TEXT("Empty Path or FileName, aborting"));
|
|
return false;
|
|
}
|
|
Path.ReplaceInline(TEXT("/"), TEXT("\\"));
|
|
return FPaths::FileExists(Path + "\\" + FileName);
|
|
}
|
|
|
|
bool UmanageTextFileBPLibrary::DeleteFile(FString Path, FString FileName)
|
|
{
|
|
if (Path == "" || FileName == "") {
|
|
UE_LOG(LogTemp, Warning, TEXT("Empty Path or FileName, aborting"));
|
|
return false;
|
|
}
|
|
Path.ReplaceInline(TEXT("/"), TEXT("\\"));
|
|
FString fullpath = Path + "\\" + FileName;
|
|
return FPlatformFileManager::Get().GetPlatformFile().DeleteFile(*fullpath);
|
|
}
|
|
|
|
bool UmanageTextFileBPLibrary::readFile(FString Path, FString FileName,FString &Str) {
|
|
if (Path == "" || FileName == "") {
|
|
UE_LOG(LogTemp, Warning, TEXT("Empty Path or FileName, aborting"));
|
|
return false;
|
|
}
|
|
|
|
FString fullpath = Path + "\\" + FileName;
|
|
return FFileHelper::LoadFileToString(Str, *fullpath);
|
|
|
|
}
|
|
|
|
bool UmanageTextFileBPLibrary::parseIniFile(FString Path, FString FileName, TMap<FString, FString>& Pairs) {
|
|
FString outstr;
|
|
readFile(Path, FileName, outstr);
|
|
FJsonSerializableArray arr;
|
|
outstr.ParseIntoArrayLines(arr);
|
|
for (auto& a : arr) {
|
|
a.TrimStartAndEndInline();
|
|
if (a.StartsWith("#") || a.StartsWith(";")) continue;
|
|
FString k;
|
|
FString v;
|
|
if (!a.Split(L"=", &k, &v)) continue;
|
|
k.TrimStartAndEndInline();
|
|
v.TrimStartAndEndInline();
|
|
Pairs.Add(k, v);
|
|
}
|
|
return !Pairs.IsEmpty();
|
|
}
|
|
|
|
FString UmanageTextFileBPLibrary::getValueFromIniFile(FString Path, FString FileName, FString Key, bool& exists, int& asInt, double& asFloat) {
|
|
TMap<FString, FString> pairs;
|
|
parseIniFile(Path, FileName, pairs);
|
|
const auto out=pairs.Find(Key);
|
|
if (!out) {
|
|
exists = false;
|
|
return FString();
|
|
}
|
|
asInt = UKismetStringLibrary::Conv_StringToInt(*out);
|
|
asFloat = UKismetStringLibrary::Conv_StringToDouble(*out);
|
|
exists = true;
|
|
return *out;
|
|
} |