C#/일반적인코딩 2008. 11. 22. 21:34

이글을 적는 이유는..

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNO=8&no=100533&ref=100533&page=2

전적으로 이글때문이다.

이글을 적으신분의 성함이 내가 아는분과 같기때문이다.

왠지.. 답을줘야 될것같은.. 막연한.. 의무감 같은거 말이다.

일단 커피한잔 때리고 와서 더 적자..

 

시작하면서..

우리의 아련한 기억속에..

WritePrivateProfileString / GetPrivateProfileString

이녀석들의 API가 남아 있는지 모르겠다. 뭐 나야 한번도 사용을 안해본거라서 저게 당최 뭔지 모른다만 아시는분들이 보시면.. 흐~ 하고 미소를 지을듯 싶다.

 

GetPrivateProfileString("거시기", "어라시구", "뭐니", "xxx.ini") 같은 이상한것들을 적어두고.. 제일뒤에 xxx.ini만 있으면..

그 프로그램마다 ini를 만들고 저장하던게 아니였나 싶다. 상세한건 당근 생략이다.

지금에 와서 저걸 사용하는 사람들도 거의 없기도 하거니와 요즘은. XML이란 요물단지덕분에 세상이 많이 변했기 때문이다.

캬~~ 또 예제를 만들어야 하다니.. 안습이다.

 

심심풀이로 콘솔을 만들어보도록 하자..

clip_image001

어디에도 셋팅이 보이지 않는다.

clip_image002

조금 보일까 말까한다.

clip_image003

흐흐..

clip_image004

그렇다.. 이건 뭐 너무 쉬운이야기들이라서.. 모르는사람이 거의 없을 수준이라고 본다만..

그래도 일일이 그림으로 적어본다.

clip_image005

 

저걸 눌러서 MSDN을 보길 바란다.

 

거기에 상세히 읽어보면 된다.

자.. 내가 글을 적으면 뭐하겠냐.. 얼른.. 빠르게 넘어가자.

횡설수설만 늘어날뿐..

개념도 쉬우니 금방 이해될것이다.

기본활용중 하나..

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=18&MAEULNO=8&no=1576&page=1

이렇듯 다들 잘 사용하는것에 대해서 굳이 내가 적을글이 뭐가 있을까.?

그렇다. 그러니 링크들로 이야기를 대신하자.

http://csharp-projects.blogspot.com/2008/01/windows-forms-user-settings-in-c.html

이글을 읽게되면.. 즉 INI의 대용적인 프로그램의 시작위치와 폼의 크기를 다시 셋팅하는것을 이야기 한다.

아.. 혹시나. 질문을 할까봐 미리 대답의 링크를 적어두자면

http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=17&MAEULNO=8&no=99697&ref=99672

셋팅된 xml파일은 여기에 저장이 된다.

Msdn의 글

http://msdn.microsoft.com/en-us/library/aa730869(VS.80).aspx

 

//-------------------------------------------------------------------------------------------------------

 

자 이제부터 내이야기를 적어보자..

뭐 이미 저정도 풀었으니 알만큼 알았을테고… 하지만..안습이게도 영어거부증과

몇몇 아티클을 대충읽는 이들이 많으니 어쩔수 없이 그들을 낚기 위해서는 뭔가 있어보이는걸 뿌려야 한다는것이다.

 

참.. 안습이다.

그러나 이미 콘솔로 시작했으니 뭐.. 낚을게 별로 없다.

하여간.. 기본적으로 어풀리케이션의 값을 저장해서 다시 시작할때 다시 그값을 자동적으로 셋팅해서 사용할수 있다는것이 핵심이다.

그것을 위해서 가볍게 음… 어떤 예제가 좋을까 음………………

콘솔이다 보니 쉽게 이런것을 예제로 하자 당신이 프로그램을 종료할때의 시간을 기록해서

다시 시작할때 보여주는것이다.

(예제로는 정말. 별로이긴 하다 ㅠ.ㅠ)

 

 

자 코딩을 해보자.

clip_image006

clip_image007

clip_image008

자.. 이렇게 될것이다.

이제 우리는 저장루틴을.. 또 첨부하자.

저장은.. 뭐 어려운게 없다.

clip_image009

자 시간을 비교해 봐라..

몇십초 차이가 나지 않는가?

static void Main(string[] args)

{

Console.WriteLine("현재시간은 : " + DateTime.Now.ToString());

Console.WriteLine("당신의 마지막 로긴시간은 : " + Settings.Default.LonginTime.ToString());

Settings.Default.LonginTime = DateTime.Now;

Settings.Default.Save();

}

 

//-----------------------------------------------

 

이렇게 간단하게 값을 저장하는것이 가능하다.

Save란 호출 하나로 말이다.

당연히 자동으로 불러와서 셋팅까지 되니 예전의 INI에 비하면.. 천국이 아닐수 없다.

여기서.. 바로 다음과정으로 가도 되겠지만 게으른 당신을위해서 저것이 저장되는 모습을 살짝이 살펴보자.

clip_image010

실제적인 저장은.. 이렇게 된다.

XML인 것이다.

그렇다. 당연히 이런것은 당신에게 무지 익숙할것이고 이정도라면.. 당연히 DataSet같은건 말밥으로 들어갈꺼란 이야기다. 그러나 질문자의 의도는 무엇이였나?

그렇다. 그넘의 해쉬~ 테이블이였다.

clip_image011

 

위의 글을 상세히 보면.. Serialize가. AS.. 즉. String이란거다. 만약 데이터 테이블같은걸 넣었다면.. XML 이라고 될것이다.

그럼.. 해쉬는 안될까?

일단은.. 이 클래스를 살펴봐야겠다.

clip_image012

우리가 셋팅이란 클래스를 만들게 되면.. 위에 그림으로 설명한.

clip_image003[1]

이걸 누르게 되면..

위의 솔류션에 Setting이란.. CS파일이 생긴다. 저 파일을 보면.

clip_image013

대충.. 이런게 생성이 된다.

 

요걸 잘 조물딱 거리면.. 우리는 이 난국을 해쳐 나갈수도 있을것이다.

 

그러기 위한 테스트를 하나 더 만들어야 겠다.

clip_image014

요렇게 만들면..

clip_image015

요렇게 만들어 질것이다.

일단은.. 시도를 해보자.

clip_image016

 

이런.. 안된다. 역쉬다.

clip_image017

코드야.. 뻔한 이야기고..

안된다는 것이다.

 

------------------------

[SerializableAttribute]

[ComVisibleAttribute(true)]

public class Hashtable : IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback, ICloneable

처음에 해쉬테이블의 ISerializable, IDeserializationCallback, 라고 적힌걸 못 보았다.

덕분에 이걸 만들어야 하나.. 졸라 짜증이 밀려왔더랬다.

두번째 보니 이게 보이더라는..

------------------------

 

그러나.. 포기를 하면되겠는가.. 안되는거 알지만 한번더 해보자.

clip_image018

스트링도 안된다.

막판이다.. 그렇다. 바이너리 함 찍어보자.

clip_image019

졸 삽질이다.

그렇다. 된다.

clip_image020

 

//-----------------------------------------------------

 

[SerializableAttribute]

[ComVisibleAttribute(true)]

public class Hashtable : IDictionary, ICollection, IEnumerable, ISerializable, IDeserializationCallback, ICloneable

 

IXmlSerializable 는 XML로.. 구현을 뽑고

Iserialiable는 Binary로 뽑아서 사용하자.

 

상세한 설명은.

http://msdn.microsoft.com/ko-kr/library/system.configuration.settingsserializeasattribute.settingsserializeasattribute.aspx

 

 

 

 

posted by 삶의여유로움
: