2012-06-25 5 views
7

Windows 레지스트리에 현재 모든 설정 (일부 종류의 주소 포함)을 저장하고있는 상당히 큰 C++ 응용 프로그램 (Windows에서는 플랫폼이 계획되지 않음)이 있습니다.설정을 저장하는 모범 사례

때로는 사용자가 레지스트리의 항목을 변경하는 데 어려움이 있기 때문에이 방법이 불편합니다. 내가 설정을 버전 화하고 싶습니다. 그래서 설정은 항상 현재 코드와 일치합니다. 현재 우리는 버전 reg 파일을 가지고 있지만 모든 reg 파일이 대상 컴퓨터에 추가 되었다면 확실하지는 않습니다. C#에서는 app.config에서 기본값을 정의 할 수 있지만 기존 설정을 덮어 쓰지는 않습니다. 그러한 메커니즘이나 라이브러리가 C++ 용으로 존재한다면 나는 모른다.

나는 다음과 같은 "기능"을 가지고 싶다 :

  • 설정 (사용자가 수행 할 수 있습니다) 대상 시스템에
  • 간단한 업데이트를 버전이 될 수
    • 에만 새 설정 업데이트에 대한 사항을 확인 기존 설정을 기본값으로 덮어 씁니다.
    • 사용자에 대한 간단한 설정 변경
    • Win XP 및 Win 7에서의 동일한 워크 플로

    지금까지 내가 Windows에서 설정을 저장하는 3 가능성이있다, 그것을보고 같이

    • 레지스트리
    • INI 파일
    • XML 파일의

    하나의 응용 프로그램이 우리의 suite는 현재 Qt를 사용하지만 Boost를 사용할 수 있습니다.

    주소는 일종의 XML 주소록에 넣을 것이지만 다른 설정에 대해서는 잘 모름, 최선의 방법은 무엇입니까?

  • +2

    물어 변환 나는 다른 대안을 제안 : YAML/JSON을 인간에 대한 읽기 쉬운 형식, SQLite for simple 임베디드. ini 파일에 관해서는 [Boost로 ini 파일을 파싱하는 법] (http://stackoverflow.com/questions/6175502/how-to-parse-ini-file-with-boost)에 관심이있을 것입니다. Boost/ini 파일에 대해 –

    +0

    +1, SS를 KI 할 수 있다면. – DevSolar

    +0

    흠도의 여러 레이어가 필요한 경우 XML/JSON 파일을 사용합니다. 그렇지 않으면 INI가 가장 간단한 해결책 일 수 있습니다. – Morwenn

    답변

    3

    주석에서 언급 한 것처럼 트리 기반 키/값 구조는 일반적인 솔루션이며 라이브러리를 쉽게 찾을 수 있습니다.

    • 설정 버전이 될 수
    : 그것은 충분히 테스트하고 쉽게 귀하의 요구 사항에 대해서는 XML 또는 JSON

    로 내보낼 수 있습니다으로

    Boost's property_tree

    은 탁월한 선택입니다

    예! "버전"을 최상위 키로 만듭니다. 다른 버전과 쉽게 비교할 수 있습니다.

    설정을 다양한 트리 노드로 분류하고 각 노드에 버전을 제공 할 수도 있습니다. (사용자가 수행 할 수 있습니다) 대상 시스템에

    • 간단한 업데이트

    응용 프로그램이 있는가가 실행될 때. 아래를 참조하십시오.

    • 만 업데이트 새로운 설정이 추가됩니다에 대한 것을 확인하고, 기존 설정은 기본 값으로 덮어되지
    • 사용자에 대한 설정
    • 간단한 변화
    • 윈 XP와 윈도우 7에서
    • 같은 워크 플로우

    설정이 한 버전에서 다른 버전으로 변경되면 대개 이러한 변경 사항이 세 가지 범주로 나뉩니다. 새 속성이 필요하며 이전 설정이 취소되고 일부 설정이 예상되는 형식을 변경합니다. 예 :

    • 로드 기존 구성 파일에 관계없이 버전 : 응용 프로그램이 초기화 될 때 "32 화씨는" "0 섭씨"

      된다.

    • 버전은 응용 프로그램에 대한 현재의 내용과 일치하지 않는 경우,
      • 새 구성 트리의 각 노드에 대해
      • 에 대한 비어있는 새 속성 트리를 만들기 예상 속성 이름의 집합을 가지고 있고, 함수 포인터 또는 이와 유사한 명령을 사용하여 이전 파일의 트리에없는 경우이 설정을 가져옵니다. 설정의 형식이 변경되면 새 이름을 지정하십시오.
      • 이전 트리에서 각 설정을 검색하고 발견 된 경우 복사하고 그렇지 않은 경우 제공된 기능의 결과를 사용하십시오.
      • 새 설정 파일을 저장하십시오.

    귀하의 "없는 설정"기능을 수행 할 수 있습니다

    • 돌아 일정한 기본 값입니다.
    • 쿼리 다른 설정에 대한 트리 (이전의 설정 중 하나를 찾을 수없는 경우 기본 값)
    • 는 사용자
    관련 문제