2010-05-04 8 views
7

데이터를 저장해야하는 응용 프로그램이 있습니다. 현재는 기본 제공 응용 프로그램 설정을 사용하고 있지만 응용 프로그램과 사용자 범위의 두 가지 옵션 만 제공합니다. 이상적으로는 응용 프로그램이 다른 사용자로 실행될 수 있도록 허용하고 해당 사용자에 대해 응용 프로그램을 다시 만들지 않고도 데이터를 찾을 수있는 "로컬"범위가 필요합니다. 응용 프로그램 범위에서이 작업을 수행 할 수 있지만 읽기 전용입니다. 응용 프로그램 데이터가 사용자에 의해 변경됩니다. 관리자 만 데이터를 변경할 수 있으면 괜찮습니다.응용 프로그램 데이터는 어디에 저장해야합니까?

아마 추측 할 수 있듯이 사용자가 데이터를 변경하고 데이터를 읽는 창 관리자를 변경할 수있는 관리 도구가 있습니다. Windows 서비스 러너가 관리 도구로 작성된 데이터에 액세스하는 것이 좋을 것입니다.

+0

어떤 데이터를 저장하고 있습니까? 사용자 환경 설정, 응용 프로그램에서 사용하는 데이터 또는 데이터? – gooch

+0

엄청나게 단순한 데이터를 저장하고 있습니다. 10 개 이상의 객체가 저장된 상황은 거의 없을 것입니다. 데이터는 내 관리 도구 밖에있는 서비스에서 실행될 작업 설정 (예 : 이름, 디렉토리, 사용할 플러그인 등)입니다. 서비스가이 정보를 찾을 수 있어야합니다. 설정은 이상적이지만 서비스에서 액세스하는 것이 어려울 것으로 보입니다. 어떻게하면 좋을까요? –

답변

7

실버 라이트, WPF, 윈폼, asp.net, 콘솔, 데이터가 매우 경우 - 당신은 (바람직하게는 태그) 플랫폼을 지정하면

아, 그리고 BTW 우리는 당신에게 더 나은 방법 도움이 될 수 , 매우 간단하고 다른 응용 프로그램이나 사용자가 적절한 권한을 가지고 읽을 수 있어야합니다. XML 파일이나 사용자의 Application Data 폴더에 일반 텍스트 파일로 저장하도록 선택할 수 있습니다. 얻은 Environment.GetFolderPath. 저장 예는 다음과 같습니다.

using System.IO; 
using System.Xml.Linq; 

string settingsDirectory = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); 
if (!Directory.Exists(settingsDirectory)) 
    Directory.CreateDirectory(settingsDirectory); 
string fileName = "tasks.xml"; 
string settingsPath = Path.Combine(settingsDirectory, fileName); 
XDocument settingsDoc = new XDocument(
    new XElement("Tasks", 
     new XElement("Task", 
      new XElement("Name", "Make Breakfast"), 
      new XElement("Location", @"C:\Program Files\MyApp\Plugins"), 
      new XElement("FileName", "breakfast.dll")))); 
// ... etc. 
settingsDoc.Save(settingsPath); 

설정이 저장되었습니다. XDocument.Load으로 다시로드 할 수 있습니다.

+0

고마워요! 이것은 위대합니다. 이 작업을 settings.settings처럼 강하게 입력 한 곳이 있습니까? 나는 이런 식으로 할 수 있기를 원합니다. Settings.Default.Tasks = TaskList; Settings.Default.Save(); –

+0

@joe : 그게 원한다면, 당신은'XmlSerializer' 클래스와'System.Xml.Serialization' 네임 스페이스를 조사해야합니다. 이것들을 사용하여 클래스 구조를 취하고 XML과 "자동으로"직렬화 할 수 있습니다. 실제'Settings' 객체에서이 부분을 만들 수는 없습니다. 'Settings'을 사용하려면'Settings'을 사용하십시오. 'Properties.Settings.Default'와 같은 싱글 톤 객체가되기를 원한다면 그럴 수도 있지만 직접 패턴을 구현해야합니다. – Aaronaught

+0

아. ApplicationData 대신 CommonApplicationData 폴더를 사용해야합니까? 설명서에는 "모든 사용자가 사용하는 응용 프로그램 관련 데이터의 공통 저장소 역할을하는 디렉토리"가 나와 있습니다. –

0

데이터베이스에 저장하려는 소리가 로컬 또는 네트워크에 있는지 여부입니다. 답은 저장하는 데이터의 종류, 앱의 배포 방법 및 기타 요인에 따라 달라집니다. 등

+0

죄송합니다. .NET 태그가 플랫폼을 지정하기에 충분하다고 생각했습니다. 어쨌든, 필자는 데이터 지속성 요구에 데이터베이스가 과도하다고 생각합니다. 이것은 WPF 응용 프로그램이 될 것입니다. –

+0

OK, .NET은 내가 나열한 모든 플랫폼과 내가 갖고 있지 않은 플랫폼을 모두 포함 할 수 있습니다. –