UE4 根据后缀名进行文件遍历 读写ini文件

有时候我们需要遍历文件夹下面的某种后缀名的文件,比如ini,然后读取。UE4已经帮我们写好了工具类,所以,我们调用就好了。哭哭


头文件引用: #include "FileManagerGeneric.h"

我做成了蓝图节点方便调用。

H:

/**
	* @param app      Node name
	* @param key      Key name
	* @param filename full filename
	*/
	UFUNCTION(BlueprintCallable, meta = (DisplayName = "Get Item Int", Keywords = "TCFunctionsLibrary sample"), Category = "TC Functions Library")
    static int GetItemInt(FString app, FString key, FString filename);

	/**
	* @param app      Node name
	* @param key      Key name
	* @param filename full filename
	*/
	UFUNCTION(BlueprintCallable, meta = (DisplayName = "Get Item Double", Keywords = "TC Functions Library"), Category = "TC Functions Library")
	static FString GetItemDouble(FString app, FString key, FString filename);

	/**
	* @param app      Node name
	* @param key      Key name
	* @param lpstring The string to write 
	* @param filename full filename
	*/
	UFUNCTION(BlueprintCallable, meta = (DisplayName = "Set Item String", Keywords = "TC Functions Library"), Category = "TC Functions Library")
	static bool SetItemString(FString app, FString key, FString lpstring, FString filename);
	
	/**
	* @param Filename  The Name of Process ready to kill
	*/
	UFUNCTION(BlueprintCallable, meta = (DisplayName = "Kill Process By Name", Keywords = "TC Functions Library"), Category = "TC Functions Library")
	static bool KillProcess(FString Filename);


	UFUNCTION(BlueprintCallable, meta = (DisplayName = "List Files In Directory", Keywords = "TC Functions Library"), Category = "TC Functions Library")
	static TArray<FString> ListFilesInFolder(FString Directory,FString FilesSuffix);

CPP:
int UTCFunctionsLibraryBPLibrary::GetItemInt(FString app, FString key, FString filename)
{
	int Resualt;
	string str_app(TCHAR_TO_UTF8(*app));
	string str_key(TCHAR_TO_UTF8(*key));
	string str_filename(TCHAR_TO_UTF8(*filename));

	Resualt = GetPrivateProfileIntA(str_app.c_str(), str_key.c_str(), 0, str_filename.c_str());
	return Resualt;
}

FString UTCFunctionsLibraryBPLibrary::GetItemDouble(FString app, FString key, FString filename)
{
	char temp[32];
	string str_app(TCHAR_TO_UTF8(*app));
	string str_key(TCHAR_TO_UTF8(*key));
	string str_filename(TCHAR_TO_UTF8(*filename));
	GetPrivateProfileStringA(str_app.c_str(), str_key.c_str(), 0, temp, 32, str_filename.c_str());
	
	return temp;
}

bool UTCFunctionsLibraryBPLibrary::SetItemString(FString app, FString key, FString lpstring, FString filename)
{
	bool Result = true;
	string str_app(TCHAR_TO_UTF8(*app));
	string str_key(TCHAR_TO_UTF8(*key));
	string str_lpstring(TCHAR_TO_UTF8(*lpstring));
	string str_filename(TCHAR_TO_UTF8(*filename));
	WritePrivateProfileStringA(str_app.c_str(), str_key.c_str(), str_lpstring.c_str(), str_filename.c_str());
	return Result;
}


TArray<FString> UTCFunctionsLibraryBPLibrary::ListFilesInFolder(FString Directory,FString FilesSuffix)
{
	TArray<FString> Files;
	FString GameRootDir = FPaths::GameDir();//这个目录是工程或打包后的根目录
	Files.Empty();
	GameRootDir = GameRootDir + Directory;
	if (FPaths::DirectoryExists(GameRootDir))
	{
		FString Path = GameRootDir + "*." + FilesSuffix;
		FFileManagerGeneric::Get().FindFiles(Files,*Path,true,false);
		for (int i = 0;i < Files.Num();i++)
		{
			Files[i] = GameRootDir + Files[i];
		}
	}
	return Files;
}


ListFilesInFolder 函数返回的是文件名数组。包含全路径。起始路径默认的是根目录,比如想访问工程或者打包游戏后的config文件夹,遍历ini文件,第一个参数传“config/”,第二个参数传“ini”就好了。不加引号.

还有,读写ini不用使用windows的API 来解决,UE4提供了GConfig。哭 我开始居然忘了!直接

FString ValueReceived;
    GConfig->GetString(
        TEXT("/Script/Engine.WorldInfo"),
        TEXT("GlobalDefaultGameType"),
        ValueReceived,
        GGameIni
    );
就可以了。 GetInt,GetFloat,SetString道理一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值