728x90
반응형
ini 파일 읽고 쓰는 소스입니다.
1. 소스
1.1 네임스페이스
네임스페이스 |
using System.Runtime.InteropServices; using System.Text; using System.IO; |
1.2 DllImport
ini 읽고, 쓰기 위해서는 C++의 kernel32.dll의 WritePrivateProfileString 함수와 GetPrivateProfileString 함수를 사용합니다.
그렇기 때문에 DllImport 속성(Atattribute)를 사용하여 dll 선언과 함수 선언을 합니다.
DllImport |
[DllImport("kernel32", CharSet = CharSet.Unicode)] static extern long WritePrivateProfileString( string Section, string Key, string Value, string FilePath); [DllImport("kernel32", CharSet = CharSet.Unicode)] static extern int GetPrivateProfileString( string Section, string Key, string Default, StringBuilder RetVal, int Size, string FilePath); |
1.3 메서드
메서드 : ini 파일 읽기 |
public string ReadIni(string filePath, string section, string key) { var value = new StringBuilder(255); GetPrivateProfileString(section, key, "Error", value, 255, filePath); return value.ToString(); } |
메서드 : ini 파일 쓰기 |
public void WriteIni(string filePath, string section, string key, string value) { WritePrivateProfileString(section, key, value, filePath); } |
1.4 ini 파일
ini 파일 |
[Section] BoolData=True IntData=1 FloatData=23.4 StringData=String |
ini 파일에서 [Section]은 section이고, BoolData, IntData ...은 key입니다.
=다음에 오는 True value입니다.
ini 파일에서 주석은 ;(세미클론)입니다.
2. 데모
using UnityEngine;
using System.Runtime.InteropServices;
using System.Text;
using System.IO;
public class DemoIniFile : MonoBehaviour
{
[DllImport("kernel32", CharSet = CharSet.Unicode)]
static extern long WritePrivateProfileString(
string Section, string Key, string Value, string FilePath);
[DllImport("kernel32", CharSet = CharSet.Unicode)]
static extern int GetPrivateProfileString(
string Section, string Key, string Default, StringBuilder RetVal, int Size, string FilePath);
[Header("Write")]
public bool m_WriteBoolData;
public int m_WriteIntData;
public float m_WriteFloatData;
public string m_WriteStringData;
[Header("Read")]
public bool m_ReadBoolData;
public int m_ReadIntData;
public float m_ReadFloatData;
public string m_ReadStringData;
void Update()
{
if (Input.GetKeyDown(KeyCode.W))
{
string filePath = Path.Combine(Application.streamingAssetsPath, "config.ini");
WriteIni(filePath, "Section", "BoolData", m_WriteBoolData.ToString());
WriteIni(filePath, "Section", "IntData", m_WriteIntData.ToString());
WriteIni(filePath, "Section", "FloatData", m_WriteFloatData.ToString());
WriteIni(filePath, "Section", "StringData", m_WriteStringData.ToString());
}
if (Input.GetKeyDown(KeyCode.R))
{
string filePath = Path.Combine(Application.streamingAssetsPath, "config.ini");
string boolData = ReadIni(filePath, "Section", "BoolData");
bool.TryParse(boolData, out m_ReadBoolData);
string intData = ReadIni(filePath, "Section", "IntData");
int.TryParse(intData, out m_ReadIntData);
string floatData = ReadIni(filePath, "Section", "FloatData");
float.TryParse(floatData, out m_ReadFloatData);
string doubleData = ReadIni(filePath, "Section", "DoubleData");
}
}
public void WriteIni(string filePath, string section, string key, string value)
{
WritePrivateProfileString(section, key, value, filePath);
}
public string ReadIni(string filePath, string section, string key)
{
var value = new StringBuilder(255);
GetPrivateProfileString(section, key, "Error", value, 255, filePath);
return value.ToString();
}
}
728x90
반응형
'프로그램 > 유니티 스크립트 소스' 카테고리의 다른 글
[유니티 스크립트 소스] 화면 캡처 및 프린트(Windows) (0) | 2020.02.21 |
---|---|
[유니티 스크립트 소스] csv 파일 읽고 쓰기 (0) | 2020.02.21 |
[유니티 스크립트 소스] 바이너리(Binary) 파일 읽고 쓰기 (0) | 2020.02.21 |
[유니티 스크립트 소스] 텍스트(txt) 파일 읽고 쓰기 (0) | 2020.02.21 |
[유니티 스크립트 소스] 휴대용 카메라 (0) | 2020.02.21 |