Files
SibIntel1/Plugins/manageTextFile/Source/manageTextFile/Private/manageTextFileBPLibrary.cpp
T
2024-04-18 19:21:54 +05:00

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;
}