UE4 CPP ファイル一覧を取得して配列に格納する
C++クラスの追加
Blueprintで呼べるHelloWorld関数を作成する
DirectoryInfo.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "Kismet/BlueprintFunctionLibrary.h"
#include "DirectoryInfo.generated.h"
/**
*
*/
UCLASS()
class CPPSAMPLE_API UDirectoryInfo : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public :
UFUNCTION(BlueprintCallable, Category = "MyBPLibrary")
static FString HelloWorld();
};
DirectoryInfo.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "CPPSample.h"
#include "DirectoryInfo.h"
FString UDirectoryInfo::HelloWorld()
{
return FString("Hello World!!");
}
フルパスを指定して、ファイル名の配列を返す関数を作成する
DirectoryInfo.h
// Fill out your copyright notice in the Description page of Project Settings.
#pragma once
#include "Kismet/BlueprintFunctionLibrary.h"
#include "DirectoryInfo.generated.h"
/**
*
*/
UCLASS()
class CPPSAMPLE_API UDirectoryInfo : public UBlueprintFunctionLibrary
{
GENERATED_BODY()
public :
UFUNCTION(BlueprintCallable, Category = "MyBPLibrary")
static FString HelloWorld();
UFUNCTION(BlueprintCallable, Category = "MyBPLibrary")
static TArray<FString> GetAllFilesInDirectory(const FString directory, const bool fullPath, const bool withoutExtention, const FString onlyFilesStartingWith, const FString onlyFilesWithExtension);
};
DirectoryInfo.cpp
// Fill out your copyright notice in the Description page of Project Settings.
#include "CPPSample.h"
#include "DirectoryInfo.h"
FString UDirectoryInfo::HelloWorld()
{
return FString("Hello World!!");
}
TArray<FString> UDirectoryInfo::GetAllFilesInDirectory(const FString directory, const bool fullPath, const bool withoutExtention, const FString onlyFilesStartingWith, const FString onlyFilesWithExtension)
{
// Get all files in directory
TArray<FString> directoriesToSkip;
IPlatformFile &PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
FLocalTimestampDirectoryVisitor Visitor(PlatformFile, directoriesToSkip, directoriesToSkip, false);
PlatformFile.IterateDirectory(*directory, Visitor);
TArray<FString> files;
for (TMap<FString, FDateTime>::TIterator TimestampIt(Visitor.FileTimes); TimestampIt; ++TimestampIt)
{
const FString filePath = TimestampIt.Key();
const FString fileName = FPaths::GetCleanFilename(filePath);
bool shouldAddFile = true;
// Check if filename starts with required characters
if (!onlyFilesStartingWith.IsEmpty())
{
const FString left = fileName.Left(onlyFilesStartingWith.Len());
if (!(fileName.Left(onlyFilesStartingWith.Len()).Equals(onlyFilesStartingWith)))
shouldAddFile = false;
}
// Check if file extension is required characters
if (!onlyFilesWithExtension.IsEmpty())
{
if (!(FPaths::GetExtension(fileName, false).Equals(onlyFilesWithExtension, ESearchCase::IgnoreCase)))
shouldAddFile = false;
}
// Add full path to results
if (shouldAddFile)
{
if(withoutExtention)
files.Add(fullPath ? filePath : FPaths::GetBaseFilename(filePath));
else
files.Add(fullPath ? filePath : FPaths::GetCleanFilename(filePath));
}
}
return files;
}
参照