2013-07-22 2 views
1
내가 INI 파일에

어떻게 INI

[DllImport("kernel32.dll")] 
private static extern int GetPrivateProfileString( // INI Read 
     String section, 
     String key, 
     String def, 
     StringBuilder retVal, 
     int size, 
     String filePath); 
[DllImport("kernel32.dll")] 
private static extern long WritePrivateProfileString( // INI Write 
     String section, 
     String key, 
     String val, 
     String filePath); 

public string ReadIni(string sectionString, string keyString, string filePathString) 
{ 
    StringBuilder temp = new StringBuilder(200000); 
    int i = GetPrivateProfileString(sectionString, keyString, "", temp, temp.Capacity, filePathString); 
    return temp.ToString(); 
} 

     // Write (Section, Key, Data, File Path) 
public void WriteIni(
string sectionString, string keyString, string dataString, string filePathString) 
{ 
    WritePrivateProfileString(sectionString, keyString, dataString, filePathString); 
} 

읽기/쓰기가 위의 코드와 잘 작동 INI 파일에서 읽기/쓰기로 다음과 같은 네이티브 API를 호출하고있어

에서 ASCII 제어 문자를 읽을 수 있습니다.

내가 ASCII 제어 문자와 같은 0x02로 (STX) 및 0x03으로 (ETX)를 읽으려고

이 기능은 단지 빈 문자열을 반환 읽어 보시기 바랍니다. 제어 문자 작성은 완벽하게 작동합니다.

일반적으로 원시 API를 사용하여 INI로 읽거나 쓸 필요가 없으며 ini 파일을 사용하지 않는 것이 좋습니다. 그러나이 API는 필자가 고쳐야 할 정말 오래된 레거시 응용 프로그램입니다. 함수는 현재 형태로 작동합니다.

어떻게 GetPrivateProfileString을 ASCII 제어 문자로 읽을 수 있습니까?

+1

INI 파일 형식은 최소한의 구문 요구 사항을 가지고 당신은 INI 파일에 쓰는 그 코드를 사용해야합니다. 제어 문자는 지원되지 않으며 일반 텍스트 만 필요합니다. ASCII 인코딩 된 텍스트가 더 좋으므로 유니 코드 인코딩을 제대로 지원하는 것은 너무 원시적이므로 확장 문자를 사용하고 코드 페이지가 일치하지 않으면 정크가 발생합니다. INI 파일에 의존하는 것은 일반적으로 실수입니다. appcompat로 인해 설정을 읽기가 너무 느립니다. –

+0

@HansPassant 전적으로 동의합니다. 이것은 제가 지원하고있는 레거시 애플리케이션이며, 불행히도 선택의 여지가 없도록 결정이 내 머리 위로 이뤄집니다. ( – l46kok

답변

0

ini에 글을 쓸 때 문제가 있다고 생각합니다. 당신은 코드 위의 INI 파일에서 읽을 수 있습니다

//Writing to ini file 

string pFileName = "test.ini" 
string W_Text = "[" + pSection + "]" + Environment.NewLine + 
           pKey + "=" + pDefValue; 
System.IO.File.WriteAllText(pFileName, W_Text, Encoding.UTF8); 

:

//Reading from ini file 

pFileName="test.ini"; 
IniDocument W_Ini = new IniDocument(pFileName, IniFileType.WindowsStyle); 
IConfigSource W_Source = new IniConfigSource(W_Ini); 
return W_Source.Configs[pSection].Get(pKey); 
+0

이 코드를 작업하려면 너겟 Nini로 참조해야합니다 (참조를 마우스 오른쪽 버튼으로 클릭). 솔루션 탐색기 - Nuget 패키지 관리 -> Nini 검색 -> "Trove 비공식 Nini 구성"설치) –