[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 제어 문자로 읽을 수 있습니까?
INI 파일 형식은 최소한의 구문 요구 사항을 가지고 당신은 INI 파일에 쓰는 그 코드를 사용해야합니다. 제어 문자는 지원되지 않으며 일반 텍스트 만 필요합니다. ASCII 인코딩 된 텍스트가 더 좋으므로 유니 코드 인코딩을 제대로 지원하는 것은 너무 원시적이므로 확장 문자를 사용하고 코드 페이지가 일치하지 않으면 정크가 발생합니다. INI 파일에 의존하는 것은 일반적으로 실수입니다. appcompat로 인해 설정을 읽기가 너무 느립니다. –
@HansPassant 전적으로 동의합니다. 이것은 제가 지원하고있는 레거시 애플리케이션이며, 불행히도 선택의 여지가 없도록 결정이 내 머리 위로 이뤄집니다. ( – l46kok