Unreal Engine 4 programming

Unreal engine 4에서 ini 파일 읽기

카스가짱 2020. 5. 26. 17:30

1. 설명

Unreal engine 4에서 C++ 코드로 ini 파일을 읽는 방법입니다.
GConfig라는 전역 변수에서 GetString() 함수를 호출합니다.

2. 함수 구조

bool FConfigCacheIni::GetString( const TCHAR* Section, const TCHAR* Key, FString& Value, const FString& Filename )

반환 값 True : 값 읽기 성공
반환 값 False : 값 읽기 실패
Section : ini section 문자열 포인터
Key : ini key 문자열 포인터
Value : 값을 읽어올 문자열 레퍼런스
Filename : ini 파일 경로

3. 특징

  • 대소문자를 구분하지 않음.

  • Section과 key에 비어있는 문자열(“”)도 사용 가능함.

  • Section이 없는 key에는 접근할 수 없음.

  • 띄어쓰기가 있는 문자열도 문자열 전체를 가져올 수 있음.

  • 주석은 ;(세미콜론)이 아니라 //(빗금 2개)를 사용함.

  • “”(큰따옴표)로 둘러싸인 문자열에서 큰따옴표는 가져와지지 않음.

  • Section과 key가 동일한 항목에 대해선 가장 아래에 있는 key 값에 해당하는 값을 가져옴. (아래에 있는 동일한 Section과 key를 가진 항목이 덮어씌워짐.)

4. 사용 예시

4.1. ini 파일 예시

key_test = key_test
= two empty

[]
empty_section = empty_section // 섹션이 비어있음
= empty_key

[owner]
name = 홍길동
= 최고의 제품

[database]
server = 192.0.2.62 ; server ip
port = 143
file = "payroll.dat"
Port = abcd
PORT = 1d1d1d2d4
port = '123123'

[owner]
name = 둘리 ;;; // 이름

4.2. Unreal 4 C++ 코드 예시

void Aini_Actor::BeginPlay()
{
	Super::BeginPlay();
	
	FString readString;
	bool returnValue;
	
	returnValue = GConfig->GetString(TEXT(""), TEXT("key_test"), readString, FString{ "C:/Users/warim/Desktop/test_ini_file.ini" });
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(static_cast<int32>(returnValue)) + " " + readString);
	readString = "";
	
	returnValue = GConfig->GetString(TEXT(""), TEXT("empty_section"), readString, FString{ "C:/Users/warim/Desktop/test_ini_file.ini" });
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(static_cast<int32>(returnValue)) + " " + readString);
	readString = "";
	
	returnValue = GConfig->GetString(TEXT(""), TEXT(""), readString, FString{ "C:/Users/warim/Desktop/test_ini_file.ini" });
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(static_cast<int32>(returnValue)) + " " + readString);
	readString = "";
	
	returnValue = GConfig->GetString(TEXT("owner"), TEXT("name"), readString, FString{ "C:/Users/warim/Desktop/test_ini_file.ini" });
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(static_cast<int32>(returnValue)) + " " + readString);
	readString = "";
	
	returnValue = GConfig->GetString(TEXT("owner"), TEXT("organization"), readString, FString{ "C:/Users/warim/Desktop/test_ini_file.ini" });
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(static_cast<int32>(returnValue)) + " " + readString);
	readString = "";
	
	returnValue = GConfig->GetString(TEXT("owner"), TEXT(""), readString, FString{ "C:/Users/warim/Desktop/test_ini_file.ini" });
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(static_cast<int32>(returnValue)) + " " + readString);
	readString = "";
	
	returnValue = GConfig->GetString(TEXT("database"), TEXT("server"), readString, FString{ "C:/Users/warim/Desktop/test_ini_file.ini" });
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(static_cast<int32>(returnValue)) + " " + readString);
	readString = "";
	
	returnValue = GConfig->GetString(TEXT("database"), TEXT("port"), readString, FString{ "C:/Users/warim/Desktop/test_ini_file.ini" });
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(static_cast<int32>(returnValue)) + " " + readString);
	readString = "";
	
	returnValue = GConfig->GetString(TEXT("database"), TEXT("file"), readString, FString{ "C:/Users/warim/Desktop/test_ini_file.ini" });
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(static_cast<int32>(returnValue)) + " " + readString);
	readString = "";
	
	returnValue = GConfig->GetString(TEXT("database"), TEXT("Port"), readString, FString{ "C:/Users/warim/Desktop/test_ini_file.ini" });
	GEngine->AddOnScreenDebugMessage(-1, 5.0f, FColor::Red, FString::FromInt(static_cast<int32>(returnValue)) + " " + readString);
}

4.3. 결과 예시

아래부터 위로 출력 순서를 가지며, 맨 위에 있는 문자열이 가장 마지막에 출력된 문자열입니다.

5. 참고

위키 백과 : INI 파일
https://ko.wikipedia.org/wiki/INI_%ED%8C%8C%EC%9D%BC