123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- // Copyright 2018-current Getnamo. All Rights Reserved
- #include "CUFileComponent.h"
- #include "HAL/PlatformFileManager.h"
- #include "Misc/FileHelper.h"
- #include "Misc/Paths.h"
- #if PLATFORM_ANDROID
- #include "Android/AndroidPlatformMisc.h"
- #endif
- UCUFileComponent::UCUFileComponent(const FObjectInitializer &init) : UActorComponent(init)
- {
- bWantsInitializeComponent = true;
- bAutoActivate = true;
- }
- FString UCUFileComponent::ProjectContentsDirectory()
- {
- return FPaths::ProjectContentDir();
- }
- FString UCUFileComponent::ProjectDirectory()
- {
- return FPaths::ProjectDir();
- }
- FString UCUFileComponent::ProjectSavedDirectory()
- {
- return FPaths::ProjectSavedDir();
- }
- FString UCUFileComponent::ExternalSaveDirectory()
- {
- #if PLATFORM_ANDROID
- return FString(FAndroidMisc::GamePersistentDownloadDir());
- #else
- return FPaths::ProjectSavedDir();
- #endif
- }
- void UCUFileComponent::SplitFullPath(const FString& InFullPath, FString& OutDirectory, FString& OutFileName)
- {
- bool bDidSplit = InFullPath.Split(TEXT("/"), &OutDirectory, &OutFileName, ESearchCase::CaseSensitive, ESearchDir::FromEnd);
- if (!bDidSplit)
- {
- //search by backslash
- InFullPath.Split(TEXT("\\\\"), &OutDirectory, &OutFileName, ESearchCase::CaseSensitive, ESearchDir::FromEnd);
- }
- }
- void UCUFileComponent::ProjectRelativePath(const FString& InFullPath, FString& OutProjectRelativePath)
- {
- const FString PathToProject = ProjectDirectory();
- FString Before, After;
- InFullPath.Split(PathToProject, &Before, &After);
- OutProjectRelativePath = After;
- }
- bool UCUFileComponent::SaveBytesToFile(const TArray<uint8>& Bytes, const FString& Directory, const FString& FileName, bool bLogSave)
- {
- //bool AllowOverwriting = false;
- IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
- if (PlatformFile.CreateDirectoryTree(*Directory))
- {
- FString AbsoluteFilePath;
- // Get absolute file path
- if (Directory.EndsWith(TEXT("/")))
- {
- AbsoluteFilePath = FPaths::ConvertRelativePathToFull(Directory + FileName);
- }
- else
- {
- AbsoluteFilePath = FPaths::ConvertRelativePathToFull(Directory + "/" + FileName);
- }
- // Allow overwriting or file doesn't already exist
- bool bSaveSuccesful = FFileHelper::SaveArrayToFile(Bytes, *AbsoluteFilePath);
- if (bLogSave)
- {
- if (bSaveSuccesful)
- {
- UE_LOG(LogTemp, Log, TEXT("Saved: %s with %d bytes"), *AbsoluteFilePath, Bytes.Num());
- }
- else
- {
- UE_LOG(LogTemp, Log, TEXT("Failed to save: %s"), *AbsoluteFilePath);
- }
- }
- return bSaveSuccesful;
- }
- return false;
- }
- bool UCUFileComponent::ReadBytesFromFile(const FString& Directory, const FString& FileName, TArray<uint8>& OutBytes)
- {
- // Get absolute file path
- FString AbsoluteFilePath = Directory + "/" + FileName;
- // Allow overwriting or file doesn't already exist
- return FFileHelper::LoadFileToArray(OutBytes, *AbsoluteFilePath);
- }
|