IT이야기

WPF / C # : 사용자 기본 설정 파일 저장 위치

cyworld 2021. 4. 1. 21:45
반응형

WPF / C # : 사용자 기본 설정 파일을 어디에 저장해야합니까?


사용자 기본 설정 파일을 저장할 권장 위치는 어디입니까? 사용자 기본 설정을 처리하는 데 권장되는 방법이 있습니까?

현재 typeof(MyLibrary).Assembly.Location는 기본 위치 로 반환 된 경로를 사용 하여 응용 프로그램에서 생성하거나 필요한 파일을 저장합니다.

편집 : 두 가지 관련 / 흥미로운 질문을 찾았습니다.

편집 # 2 : 이것은 이전에 설정을 사용한 적이없는 저와 같은 사람들을위한 메모입니다. 설정은 매우 유용하지만 무슨 일이 일어나고 있는지 파악하기 위해 많은 것을 파헤쳐 야했습니다 (나도 익숙한 것이 아니라 Python 세계에서 온 것입니다). 사전을 저장하고 싶었 기 때문에 상황이 복잡 해졌고 분명히 직렬화 할 수 없습니다. 설정은 또한 수행하는 작업에 따라 3 개의 다른 파일에 저장되는 것 같습니다. app.config, user.config그리고 settings.setting파일. 여기에 유용하다고 생각되는 두 개의 링크가 더 있습니다.


응용 프로그램 설정을 충분히 쉽게 사용할 수 있습니다.

전에 그렇게하지 않은 경우 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 속성을 선택합니다. 설정 탭을 선택합니다. 범위로 "사용자"를 선택했는지 확인하십시오 (그렇지 않으면 설정이 읽기 전용 임).

이에 액세스하는 코드는 간단합니다.

forms.Width = Application1.Properties.Settings.Default.Width;

저장해야하는 경우 :

Application1.Properties.Settings.Default.Width = forms.Width;
Application1.Properties.Settings.Default.Save();

위의 샘플에서 Width는 설정 탭에서 정의한 사용자 지정 설정 이름이고 Application1은 애플리케이션의 네임 스페이스입니다.

편집 : 추가 질문에 응답

설정에 사전 개체를 저장하고 싶다고 말씀하셨습니다. 발견했듯이 Dictionary 개체는 직렬화 할 수 없기 때문에 직접 수행 할 수 없습니다. 그러나 자신 만의 직렬화 가능한 사전을 매우 쉽게 만들 수 있습니다. Paul Welzer는 그의 블로그 에서 훌륭한 예 를 보여주었습니다 .

상황을 약간 어둡게하는 링크가 몇 개 있습니다. 원래 질문은 "사용자 기본 설정 파일"을 저장할 위치입니다. 설정 기능에 대한 Microsoft의 의도는 정확히 ... 사용자 스킨 기본 설정, 레이아웃 선택 등을 저장하는 것입니다. 그렇게 쉽게 악용 될 수 있지만 응용 프로그램의 데이터에 대한 일반 저장소가 아닙니다.

데이터는 정당한 이유로 별도의 장소에 저장됩니다. 일부 설정은 응용 프로그램 설정이며 읽기 전용입니다. 이는 앱이 작동해야하지만 사용자에게 국한되지 않는 설정입니다 (예 : 앱 리소스에 대한 URI 또는 ​​세율 일 수 있음). 이들은 app.config에 저장됩니다.

사용자 설정은 사용자 문서 / 설정 폴더의 난독 화 된 디렉토리에 저장됩니다. 기본값은 app.config에 저장되어 있지만 (내 생각에는 머리 위에서는 기억할 수 없다고 생각합니다) 모든 사용자 변경 사항은 개인 폴더에 저장됩니다. 이는 사용자마다 변경되는 데이터를 의미합니다. ( "사용자"란 앱 사용자가 아니라 Windows 사용자를 의미합니다.)

이것이 당신을 위해 이것을 다소 명확히하기를 바랍니다. 시스템은 실제로 매우 간단합니다. 처음에는 약간 이질적으로 보일 수 있지만 며칠 사용하고 나면 다시 생각할 필요가 없습니다. 작동합니다.


관리자가 아니거나 Vista에서 실행하는 경우 "프로그램 파일"폴더 (또는 그 하위 폴더)에 쓸 수 없습니다.

사용자 환경 설정을 저장하는 올바른 위치는 다음과 같습니다 (분명히 MyCompanyName 및 MyApplicationName을 올바른 이름으로 대체).

디스크에서 :

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData) + "\\MyCompanyName\\MyApplicationName"

또는 레지스트리에서 키 아래 :

 HKEY_CURRENT_USER\Software\MyCompanyName\MyApplicationName

이러한 위치는 사용자 단위이며 관리자가 아닌 사용자, 동일한 컴퓨터를 사용하는 여러 사용자, 빠른 사용자 전환, 터미널 서비스 및 사람들이 소프트웨어와 상호 작용할 수있는 다른 모든 방법과 함께 작동합니다.

모든 사용자에 대한 공통 위치가 필요한 경우 :

  1. 사용자가 관리자로 실행될 때만 작동합니다.
  2. Vista에서 안정적으로 작동하지 않습니다.
  3. 빠른 사용자 전환을 통해 동일한 컴퓨터에서 동시에 응용 프로그램을 실행하는 두 명의 사용자처럼 모든 것을 직접 처리해야합니다.

위치는 다음과 같습니다.

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationCommonData) + "\\MyCompanyName\\MyApplicationName"

또는 레지스트리에서 키 아래 :

 HKEY_LOCAL_MACHINE\Software\MyCompanyName\MyApplicationName

격리 된 저장소를 사용할 수 있습니다. 사용자, 어셈블리 및 / 또는 도메인별로 격리 할 수 ​​있습니다.

격리 된 스토리지 소개
http://msdn.microsoft.com/en-us/library/3ak841sy(VS.80).aspx

격리 유형
http://msdn.microsoft.com/en-us/library/eh5d60e1(VS.80).aspx


the following seems to be the best option:

Application.UserAppDataPath

ReferenceURL : https://stackoverflow.com/questions/396229/wpf-c-where-should-i-be-saving-user-preferences-files

반응형