INI 파일 또는 레지스트리 또는 개인 파일?


19

프로젝트 구성을 저장하고 싶습니다.

  1. 화면 크기
  2. 화면 위치
  3. 폴더 경로
  4. 사용자 설정 등.

이를 저장할 수있는 표준 위치는 구성 값입니다.

  1. 기재
  2. INI 파일
  3. 개인 파일 (예 : * .cfg)

이 장소들 중에서 어떻게 선택합니까? 또한, 그것들을 사용하는 것에 대한 장단점 이 있습니까?


2
어떤 도구를 사용하고 있습니까? 일부 기술에는 구성 관리 도구가 매우 훌륭하게 구축되어 있습니다.

@ Pierre303은 현재 VC ++에 VS 2008을 사용하고 있습니다
Shirish11

사용자가 변경해야합니까?
JeffO

1
YAML을 고려해 본다면 ini와 xml을 모두 얻을 수 있습니다. en.wikipedia.org/wiki/YAML
JF Dion

답변:


20

또한 그중 하나를 사용하는 장단점이 있습니까?

기재:

  • + Windows 환경에서는 비교적 표준입니다.
  • + 설치자 등의 일반적으로 좋은 지원
  • - 응용 프로그램을 이식하려는 경우 플랫폼 별 API
  • - 특히 사람이 읽을 수있는 것은 아닙니다.

INI 파일 :

  • + 간단한 형식.
  • + 가지고 다닐 수 있는.
  • + 인간이 읽을 수 있습니다.
  • - 더 복잡한 정보를 저장하기 어려울 수 있습니다 (예 : 2 개 이상의 깊이로 중첩 된 것).
  • ?어렵지 않지만 자신의 파서를 작성하거나 SimpleIni 와 같은 외부 라이브러리를 사용해야 할 수도 있습니다 (주석에 대한 Jonathan Merlet에게 감사드립니다).

XML 파일 (이것은 .cfg 옵션이라고 생각합니다) :

  • + 표준 형식입니다.
  • + 가지고 다닐 수 있는.
  • + 깊이 중첩 된 구조를 지원합니다.
  • - 특히 사람이 읽을 수있는 것은 아닙니다.

개인적으로 Windows 응용 프로그램의 경우 C #을 사용하고 XML로 저장된 사용자의 개인 파일을 사용하는 경향이 있습니다. 필자는 일반적으로 필자가 작성하는 응용 프로그램 유형 (및 응용 프로그램에 구성 편집기가 있어야 함)에서 인간의 가독성을 우선시하지 않으며 .NET 환경에서는 XML을 사용하는 것이 매우 쉽습니다. 나는 종종 구성 파일과 직렬화되는 UserConfiguration 객체로 끝나는 경우가 많으며 개발 (파싱, 캐스팅)과 거의 관련이 없으며 강력한 유형의 환경에서 구성을 사용할 준비가되었습니다.


얼마 전에 INI 파일을 구문 분석하기 위해 SimpleIni 를 사용 했으며 정상적으로 작동했습니다.
Jonathan Merlet

@JonathanMerlet에게 감사드립니다. 게시물에 SimpleIni를 추가했습니다.
Daniel B

15

INI 파일을 사용하면 더 인간 친화적 인 옵션입니다.

[window]
width       = 600
height      = 350
position.x  = 400
position.y  = 200

[paths]
path1       = "/some/random/path/"
path2       = "/some/other/random/path/"

[user]
name        = "Yannis"
preference  = "INI"

XML은 좋은 선택이지만 INI의 단순성과 우아함을 능가 할 수는 없습니다.

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <window>
        <width>600</width>
        <height>350</height>
        <position>
            <x>400</x>
            <y>200</y>
        </position>
    </window>
    <paths>
        <path1>/some/random/path/</path1>
        <path2>/some/other/random/path/</path1>
    </paths>
    <user>
        <name>Robert</name>
        <preference>XML</preference>
    </user>
</configuration>

INI는 플랫폼에 대해 잘 이해하고 있습니다. INI 파일을 읽고 편집하는 데 전문화 된 도구가 필요한 사람은 누구입니까?


2
재밌지 만 XML이 더보기 좋고 읽기 쉽다는 것을 알았습니다. 자세한 정보가 마음에 들지 않는 사람들에게는 JSON이 적합한 대안입니다.
Robert Harvey

3
@RobertHarvey JSON 내가 좋아하고 (더 깊은 중첩이 필요한 경우에 사용) XML은 실제로 내 차가 아니다 ...
yannis

2
값을 속성으로 롤링하여 XML을 더 멋지게 만들 수 있습니다. 예를 들어<window width="600" height="350" />
Robert Harvey

나는 아직 아무도 YAML을 언급하지 않은 것에 놀랐습니다. JSON보다 인간 친화적 인 터치이지만 기능과 구문이 상당히 비슷하다고 생각합니다. yaml.org 웹 사이트는 아직 익숙하지 않은 사람을 놀라게 할 것입니다.
Daniel B

@DanielB 누군가 가 YAML을 언급했습니다 ;)
yannis

6

선호하는 것은 XML 파일입니다. 그것들은 계층 적이며, 상상할 수있는 거의 모든 방식으로 당신의 의지에 구부릴 수 있으며, 플랫폼에 독립적으로 이해되며, 읽고 쓸 수있는 다양한 소프트웨어가 있습니다.


6
그러나 끔찍하게 장황하고 결국 사람이 읽을 수없는 경향이 있습니다 (네임 스페이스 선언 및 기타 bs로 들여 쓰기되거나 최대로 부풀려지지 않았다고 생각하십시오).
Manjabes

1
@Manjabes : 구성 파일에 중요하지 않은 특성.
Robert Harvey

@ robert harvey : 내가 사는 곳에서 매우 중요합니다. 설정을 사용한 기본 조정의 경우 GUI를 사용하고 고급 설정의 경우 ini를 편집하십시오.
Pieter B

6

Jeff D의 YAML 제안을 확장하기 위한 간단한 소개입니다.

YAML은 JSON과 유사합니다 (실제로 JSON은 YAML 표준 버전 1.2 이후 YAML의 하위 집합이므로 YAML 파서가 유효한 JSON을 구문 분석 할 수 있음). 언뜻보기에 주요 차이점은 YAML (기본적으로)은 계층 구조를 표시하기 위해 대괄호 대신 들여 쓰기를 사용한다는 것입니다. 문자열에 대한 따옴표가 눈에 띄게 부족합니다. 위의 간단한 예 :

configuration:
  window: 
    width:       600
    height:      350
    position:
      x:         400
      y:         200
  paths:
    path1:       some/random/path
    path2:       some/other/random/path
  user:
    name:        Joe Soap
    preference:  YAML

더 좋은 예는 Wikipedia의 YAML 페이지 를 참조하십시오 . YAML에 대한 지원은 대부분의 주요 언어에 존재합니다 (자세한 내용은 yaml.org 참조).


3

옵션 인 데이터베이스를 잊었습니다. 이것은 주로 응용 프로그램이 로그인 한 Windows 사용자에게 의존 할 수 없을 때 사용자가 응용 프로그램에 로그인하는 시나리오에서 사용됩니다. 예를 들어 앱이 키오스크 모드 창에서 실행되는 경우입니다.


데이터베이스에 대한 연결 세부 사항 / 문자열을 보유하려면 INI 파일 또는 레지스트리 키가 필요할 수 있습니다.
Class Skeleton

@CamelCase Inifile 또는 레지스트리 키는 이미 질문에 언급되었지만 데이터베이스는 아닙니다. 여러 방법을 동시에 사용할 수 없다는 말은 아닙니다.
Pieter B

1

개인적으로 선호하는 것은 XML 파일입니다.

대부분의 경우 사용자가 구성 설정을 편집 할 필요가 없으므로 사람의 가독성 문제가이 경우에 대한 논쟁이 아닙니다.

편집해야 할 경우 편집 도구를 제공 할 수 있습니다. 이렇게하면 사용자가 데이터를 다루는 것을 방지 할 수 있습니다. 기본 설정을 복원하려면 대부분의 사용자가 편한 x 파일을 삭제하도록 지시하면됩니다.

Windows 7 등의 일부 위치에는 기본적으로 쓰기 권한이 없으므로 파일을 저장할 권한이 있으므로주의해야합니다.


INI 파일은 구성을 저장하는 좋은 표준 방법이며 시험 및 테스트를 거치지 만 조금 'Windows 3.1'인 것 같습니다!

사용자가 자신의 데이터를 땜질 할 수있게하려면 가장 좋은 옵션 일 것입니다


나는 개인적으로 레지스트리에서 멀어지게했다. 한 가지 이유는 사용자가 데이터를 저장하려는 위치에 대한 읽기 / 쓰기에 필요한 권한이 있음을 보장 할 수 없습니다.

레지스트리 가상화가 작동하는 최신 OS에서는 가상화 된 설정을 '볼'수 없기 때문에 심각한 혼란을 야기 할 수 있습니다. 이로 인해 문제가 발생한 이유를 파악하기 위해 몇 시간을 소비 한 적이 있습니다.


3
레지스트리 위치에 대한 권한이 걱정된다면, 잘못된 위치에 저장하려고했을 것입니다. 사용자에게는 HKey_Current_User 하이브에 대한 권한이 있어야하며, 여기에서 사용자 별 설정이 이루어져야합니다!
닐 화이트

@NeilWhite- 권한이 있어야한다는 데 동의 했지만 지나치게 열성적인 IT 관리자가이를 변경할 수 있습니다 (또는 읽기 / 쓰기 권한을 부여하지만 권한을 만들 수는 없음). 또한 OP는 이러한 설정이 반드시 사용자 당 이라고 언급하지 않았으며 컴퓨터 별로 설정되었을 수 있습니다.
Matt Wilko

또한 레지스트리 크기 제한이있을 수 있습니다. 파일이 없습니다.
linquize
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.