2012-08-22 2 views
4

저는 주로 C# .NET 4.0 개발자입니다. 지금은 응용 프로그램 설정을 저장하고 검색하는 방법에 대해 다시 생각하고 있습니다.응용 프로그램 설정을 저장하고 검색하는 적절한 방법은 무엇입니까?

과거에는 탭으로 구분 된 키/값이있는 단순한 '평탄한'텍스트 파일부터 계층화 된 XML 파일 및 그 밖의 몇 가지 방법까지 다양한 방법을 사용했습니다. App.Config/AppSettings 클래스에 내장 된 것을 과거에 (그리고 다시 사용을 고려하고 있습니다.)하지만이 소스에서로드 한 데이터를 저장하는 방법은 없습니다. 이렇게하는 데 어려움이 있지만 그 점은 문제가 아닙니다.)

요점은 이러한 모든 방법에는 단점이 있으며 일부는 다른 것보다 효과적이지만 일부는 다른 것보다 더 사용하기 쉽지만 일관되고 신뢰할 수있는 무언가를 손질하려고합니다.

내 질문에 몇 가지 유효한 답변이 있으므로 가장 좋은 데이터를 선택해야합니다. 내장 된 프레임 워크에서 데이터 저장 및로드를 모두 권장한다면 어떻게 될까요? 실행 파일을 동반 할 수있는 설정 파일에서 또는 프레임 워크에 내장되어 있지 않은 경우 어떤 표준을 권하고 싶습니까? XML? '플랫'파일? 독립형 데이터베이스?

구성 자체가 그리 크지 않고 실제 데이터 량이 데이터베이스에서 읽히거나 (다른 기술을 사용한다고 가정)

+0

좋은 질문이지만 저는 개인적으로 kernel32 WritePrivateProfileString을 좋아한다고 생각합니다. 단순함 안정성과 속도면에서 아무 것도 이길 수 없다는 강한 견해를 가지고 있습니다. C# 인터페이스를 제공 할 수 있습니다. [예, 닫으 려하지 않겠습니다.] ] – Cynede

+0

이것은 약간의 장점이있는 질문이지만, "옳은"대답이 없다는 것을 스스로 제안했습니다. 나는 또한 당신이'app.config' 접근법을 가지고 문제가 무엇인지에 대해서 명확하지 않다. (분명히 당신이'app.config'에 다시로드하는 데이터를 저장합니까?).그걸 확대 할 수 있니? –

+1

확실한 Dan; 내가 지금 겪고있는 문제는 내 AppSettings 사전이 ReadOnly이고, 결과적으로 항목을 제거/다시 추가 할 수 없다는 것입니다. 내 앱 설정을 파일로 다시 저장할 수있는 유일한 방법이라고 생각하면됩니다. , 전체 파일을 다시 작성하는 것이므로 필자는 그 파일을 특별히 추구하지는 않는다. '올바른'해결책은 무엇인지에 대한 의견의 문제이기 때문에 '올바른'답변은 없지만 잠재적으로 '유효한'답변이 상당히 많습니다. 나는 단순히 작업을 수행하는 가장 신뢰할 수있는 완전한 방법을 찾고있다. 귀하의 의견에 감사드립니다. – DigitalJedi805

답변

2

나는 레지스트리 팬이면서 오히려 거기에 내 설정을 가지고 있지만 내장 된 설정을 사용 했으므로 프로젝트 속성에서로드 및 기본값을 정의한 다음

Properties.Settings.Default.<settingname> 

로 액세스도를 설정할 수 있습니다, 그래서 Properties.Settings.Default.HideDisabled = true;

당신은

Properties.Settings.Default.Save(); 

필자와 t에 없었 문제를 저장할 수 있습니다 그러나 당신이 말했듯이, 모든 것은 프로와 죄수를 가지고 있습니다.

+0

이것은 IMHO라는 사용자 설정을 저장하는 가장 좋은 방법입니다. –

+0

(이전 코멘트를 편집 할 수 없음) 나는 물론 사용자 설정이 아니라 응용 프로그램 설정을 말하고자했습니다. –

+0

이것은 합리적인 방법으로 보이지만 과거에는 사용하지 않은 것 같습니다. 당신이 나를 'Hello World'또는 이걸 사용하기 위해 그런 사람을 가리킬 수 있는지 궁금합니다. – DigitalJedi805

2

그냥 또 다른 방법 (KERNEL32)는, 내가에 작업 한 일부 응용 프로그램은 지역 포함 우리가 변종의 목록을 시작으로 심지어는 C# 4.0하지만 여기

namespace Ini { 
    public class IniFile { 
     private string path; 
     [DllImport("kernel32")] 
     private static extern long WritePrivateProfileString(string section, 
      string key, string val, string filePath); 
     [DllImport("kernel32")] 
     private static extern int GetPrivateProfileString(string section, 
        string key, string def, StringBuilder retVal, 
      int size, string filePath); 
     public IniFile(string INIPath) { 
      path = INIPath; 
      } 
     public void IniWriteValue(string Section, string Key, string Value) { 
      WritePrivateProfileString(Section, Key, Value, this.path); 
      } 
     public string IniReadValue(string Section, string Key) { 
      StringBuilder temp = new StringBuilder(255); 
      int i = GetPrivateProfileString(Section, Key, "", temp, 
              255, this.path); 
      return temp.ToString(); 
      } 
     } 
    } 
1

유효해야합니다 C 번호에 대해 많은 아니에요 데이터베이스와 우리는 그 데이터베이스 파일을 사용하여 설정을 유지했습니다. 작동하지만, 뭔가 잘못 느껴질 수 있습니다. 응용 프로그램이 실행되고 있지 않을 때 설정을 수정할 수있게하려면 문제가 될 수 있습니다. (충돌 등을 우회하려면)

대부분 나는 Environment.SpecialFolder.ApplicationData 폴더에 저장된 XML 파일을 사용하고 DataContractSerializer을 사용합니다. 일부 버전 관리를 할 수는 있지만 가장 중요한 것은 설정 객체의 특정 속성이 새로운 것이거나 존재하지 않을 때 XML 파일을로드하고 저장할 수 있다는 것입니다. 응용 프로그램을 중단시키지 않고 설정을 다시 저장하면 최신 버전 만 저장됩니다. 나는 깨끗하고, 단순하고 단순하다고 생각합니다.

관련 문제