2013-03-04 2 views
0

이것은 철학적 인 질문 일 수도 있지만 이전 엔지니어가 작성한 코드를 검토 중이며 가장 좋은 시간은 ini 파일을 읽는 것이 언제인지 궁금해하고 있습니다. 현재 응용 프로그램은 값이 필요할 때마다 ini 파일을 다시 읽고 변경 될 때마다 데이터를 씁니다. 내 마음에 더 나은 솔루션은 한번 읽고 쓰고 정보를 메모리에 저장하는 것입니다. 내가 놓친 게 있니? ini 파일에는 약 40 개의 항목이 있습니다.WinCE 6.0 ini 파일 읽기

또한 엔지니어가 자신의 클래스를 만들었지 만이를 수행 할 기존 클래스가 없습니까?

답변

1

기본적으로 구성을 시작할 때 한 번 읽으므로 CE뿐 아니라 다른 시스템에서도이 설정을 읽습니다. 구성의 변경 사항에 대응할 수 있기를 원하면 예를 들어 같이 다시로드하는 것이 좋습니다. 프로그램에 신호를 보냅니다. CE에서 신호가 부족하면 명명 된 이벤트를 사용하거나 UI가 있는지 사용자에게 질문 할 수 있습니다. 이 모든 것이 없으면 정기적 인 간격으로 파일의 타임 스탬프를 확인하고 변경된 파일을 다시로드하지만 여전히 메모리에 복사본을 보관합니다.

단일 값에 대해 파일을 열어 닫지 않는 이유는 두 값에 종속성이있는 경우가 있으며, 그렇게하면 이전 값과 새 값이 메모리에 저장되어 불일치가 발생할 수 있습니다. 또한, 실제로 사용하기 전에 위법성에 대한 구성을 검증 할 것입니다. 즉, 단일 구성 값을 읽기 위해 하드 디스크에 액세스하는 것은 너무 비효율적입니다.

변경 사항 작성과 관련하여 사용자가 명시 적으로 요청하거나 변경 사항을 수락 한 후 자동으로 요청합니다. 여전히 단일 값을 쓰지 않는 것과 같은 이유 때문에 단일 값을 쓰는 것을 피하려고합니다.

마지막으로 INI 파일은 쓸모없는 것으로 선언되었으므로 CE에 의해 읽기 및 쓰기 용 Win32 API가 지원되지 않습니다. 이것은 왜 누군가가이 파일을 읽고 쓰는 자신의 클래스를 굴리는 이유를 설명합니다. MS는 대신 API를 사용하고 지원하는 레지스트리를 사용하기를 원합니다. 텍스트 구성 파일 (필수 INI 파일이 아님)이 레지스트리가 제공하지 않는 몇 가지 기능을 제공하기 때문에 여기서는 MS와 실제로 동의하지 않습니다. 기존 텍스트 도구를 사용할 수있는 능력.

0

Boost.PropertyTree 라이브러리를 사용하여 INI 파일을 읽고 쓸 수 있습니다. 여기

는 INI 파일 수정을 읽고 다시 저장하는 샘플 코드입니다 :

#include <iostream> 
#include <string> 
#include <boost/property_tree/ptree.hpp> 
#include <boost/property_tree/ini_parser.hpp> 

/* 
[owner] 
name=John Doe 
organization=Acme Widgets Inc. 
*/ 

int main(int ac, char* av[]) 
{ 
    boost::property_tree::ptree pt; 

    // Read 
    read_ini("data.ini", pt); 
    std::cout << pt.get<std::string>("owner.name") << std::endl; // John Doe 
    std::cout << pt.get<std::string>("owner.organization") << std::endl; // Acme Widgets Inc. 

    // Write 
    pt.put<std::string>("owner.name", "New Name"); 
    pt.put<std::string>("owner.name", "New Organization"); 
    write_ini("date2.ini", pt); 

    return 0; 
} 

참고 : Windows CE에서이 코드를 컴파일 할 때 당신이 조정 Boost.PropertyTree 라이브러리에해야 할 수도 있습니다 . Windows CE 용 Standard C++ Library에는 <locale> 헤더가 없으며 Boost.PropertyTree는 INI 파일을 읽고 쓸 때이를 사용합니다.

+0

헤더를 얻으려면 CE5 및 6 (그리고 어느 정도까지는 이전 버전)을 지원하는 STLport로 전환 할 수도 있습니다. –