말그대로 컨픽 파일을 손수 만들 필요없이 자동으로 해줍니다.
과연 얼만큼 자동으로 해줄까요?
일단 컨픽 파일은 아래와 같은 XML파일입니다.
윈9X에서는 INI파일을 사용했지만 시대가 시대인만큼 컨픽 파일에서도 XML을 쓰는군요.
이 부분이 바로 우리 컨픽 내용입니다.
소스를 통해서 볼까요?
참고로 프로젝트 레퍼런스에서 System.configuration을 추가해야 된답니다.
아래 Validator는 ASP.NET에서나 보던 것이군요. ASP.NET과 마찬가지로 문자열에서 안되는 문자라던지 정수형에서 변수 값 범위 등을 설정할 수 있습니다.
별다른 변수 생성을 통해서는 안되고 저런식으로 '리플렉션과 프로퍼티'를 이용해야 한답니다. 개인적으로 프로퍼티를 잘 사용하는 편은 아니지만 이만큼 편하다면 어쩔 수 없지요.
아무튼 저런식으로 지정하고 나면, 클래스를 통채로 저장하는 듯한 기분입니다. 클래스 내에서 지정만 해주면 저장하고 읽는 부분은 매우 간단합니다.
CreateSection() 메소드에서는 컨픽 파일을 열고 - 없으면 생성한 후 - 컨픽을 로드한 후, 다시 수정하고 저장하고 값을 확인하는 테스트를 합니다.
참 편리하죠?
참고:
http://msdn2.microsoft.com/en-us/library/system.configuration.configurationpropertyattribute(vs.80).aspx
과연 얼만큼 자동으로 해줄까요?
일단 컨픽 파일은 아래와 같은 XML파일입니다.
윈9X에서는 INI파일을 사용했지만 시대가 시대인만큼 컨픽 파일에서도 XML을 쓰는군요.
이 부분이 바로 우리 컨픽 내용입니다.
소스를 통해서 볼까요?
참고로 프로젝트 레퍼런스에서 System.configuration을 추가해야 된답니다.
using System;
using System.Collections.Generic;
using System.Text;
using System.Configuration;
using System.Reflection;
namespace ConfigTest
{
public class MySection : ConfigurationSection
{
[ConfigurationProperty("fileName", DefaultValue = "default.txt")]
[StringValidator(InvalidCharacters = " ~!@#$%^&*()[]{}/;'\"|\\", MinLength = 1, MaxLength = 60)]
public string FileName
{
get
{
return (string)this["fileName"];
}
set
{
this["fileName"] = value;
}
}
[ConfigurationProperty("maxUsers", DefaultValue = (long)10000)]
[LongValidator(MinValue = 1, MaxValue = 1000000, ExcludeRange = false)]
public long MaxUsers
{
get
{
return (long)this["maxUsers"];
}
set
{
this["maxUsers"] = value;
}
}
}
class Program
{
static void CreateSection()
{
try
{
const string MySectionName = "MySection";
MySection customSection;
// open config file
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
if (config.Sections[MySectionName] == null)
{
customSection = new MySection();
config.Sections.Add(MySectionName, customSection);
customSection.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
}
// read
MySection section = config.Sections[MySectionName] as MySection;
Console.WriteLine(section.FileName);
// modify
section.FileName = "new_file.txt";
config.Save(ConfigurationSaveMode.Full);
Console.WriteLine(section.FileName);
}
catch (ConfigurationErrorsException err)
{
Console.WriteLine(err.ToString());
}
}
static void Main(string[] args)
{
CreateSection();
}
}
}
C#의 재미있는 기능 중 하나인 리플렉션을 사용했군요. ConfigurationProperty를 이용해서 어떤 이름으로 저장할 것인지, 게다가 디폴트 값까지 지정할 수 있습니다.아래 Validator는 ASP.NET에서나 보던 것이군요. ASP.NET과 마찬가지로 문자열에서 안되는 문자라던지 정수형에서 변수 값 범위 등을 설정할 수 있습니다.
별다른 변수 생성을 통해서는 안되고 저런식으로 '리플렉션과 프로퍼티'를 이용해야 한답니다. 개인적으로 프로퍼티를 잘 사용하는 편은 아니지만 이만큼 편하다면 어쩔 수 없지요.
아무튼 저런식으로 지정하고 나면, 클래스를 통채로 저장하는 듯한 기분입니다. 클래스 내에서 지정만 해주면 저장하고 읽는 부분은 매우 간단합니다.
CreateSection() 메소드에서는 컨픽 파일을 열고 - 없으면 생성한 후 - 컨픽을 로드한 후, 다시 수정하고 저장하고 값을 확인하는 테스트를 합니다.
참 편리하죠?
참고:
http://msdn2.microsoft.com/en-us/library/system.configuration.configurationpropertyattribute(vs.80).aspx
'Programming > .NET' 카테고리의 다른 글
| URL 상대 경로, 절대 경로 변환 클래스 (C#) (0) | 2008/03/13 |
|---|---|
| C#으로 익스플로러 툴바 및 BHO만들기 (10) | 2007/11/07 |
| C#에서 unmanaged 함수 호출하기. (0) | 2007/08/31 |
| .NET 2.0 C#의 Configuration Manager (0) | 2007/08/30 |
| C# on multicore processor (or multi processor) - 멀티 프로세싱을 위한 C# (0) | 2007/07/30 |



Prev
Rss Feed