2009년 2월 19일 목요일

숫자 입력만 받아들이기


private void TextBox_KeyPress(object sender, KeyPressEventArgs e)
{
if (!Char.IsDigit(e.KeyChar) && e.KeyChar != 8)
{
e.Handled = true;
}
}

TextBox에 KeyPress이벤트로 키 입력을 숫자키와 백스페이스로 제한한 코드다..
KeyChar값이 ASCII니까 8이 백스페이스.....

응용편....

Char.IsLetter(e.KeyChar) : 알파벳이라면 여기에 걸릴테지...
Char.IsSymbol(e.KeyChar) : 기호는 이걸로 거를테고...
Char.IsControl(e.KeyChar) : 제어 문자 거르고...
Char.IsPunctuation(e.KeyChar) : 구분 문자인지 체크..

숫자와 영문을 동시에 처리한다면 Char.IsLetterOrDigit()을 쓰는 방법도 있다..^^


크리에이티브 커먼즈 라이선스
Creative Commons License
Posted by Kuro™

2009년 2월 16일 월요일

텍스트 큐브에 입성~

우연한 기회에 초대장을 구해 텍스트 큐브로 입성~

이래서 비공개 블로그는 들어오는 것 만으로도 감동인가... T^T

므하하하~~

티스토리 데이터 모두 옮겼는데...;;;

우선은 양쪽 모두 포스팅 해야지 ㅠ.ㅠ

인터넷 없이 3일...

금요일 저녁부터 일요일까지 3일동안 인터넷 없는 밤을 보냈다..
이게 뭔일인지...
인터넷이 안되어 항의도 해볼까 했지만..
"오랜만에 좀 쉬어 보자" 라는 생각에 그냥 뒀다..
덕분에.. 잠도 푹~ 자고..
그동안 못본 영화랑 드라마도 좀 봐주고..
오늘 저녁엔 인터넷이 될라나 ㅡㅡ;

2009년 2월 11일 수요일

BestCrypt Traveller + Loader

단일 파일로 만들어진 파일 암호화 프로그램.

단일 파일 파일 구성, 간편한 셋팅 등으로 손쉽게 암호화된 컨테이너 파일을 생성할 수 있다.

### 준비물 ###
1. BestCrypt Traveller - 개인 사용자에게는 무료로 배포된다. 링크를 이용해 다운로드 받기를...
2. BestCrypt Loader - BCTraveller의 귀찮은 실행 문제를 해결해 주는 로더

### 사용 방법 ###

1. BestCrypt Traveller와 BestCrypt Loader를 다운로드 받는다.
2. BestCrypt Loader의 압축을 해제하여 적당한 디렉토리로 옮긴다.
3. 1에서 다운받은 BestCrypt Traveller를 2와 같은 디렉토리로 이동한다.
    다음과 같은 형태로 파일이 저장되어 있으면 OK.


4. BCTraveller Loader.exe를 실행한다.

### 컨테이너 파일 만들기 ###

1. 트레이 아이콘에서 BestCrypt를 클릭하고 "Create Ne Container"를 선택한다.

2. 저장할 파일 이름, 파일 저장 위치, 파일 사이즈 등의 속성을 설정한다.
주의 할 점은 파일 이름을 쓸 때에 확장자를 ".jbc"로 기입해 줘야 하며, 파일 저장 위치를 실행파일이 있는 하위의 Data 폴더에 저장하여야 한다. "Format now"를 선택하면, 컨테이너 파일이 생성되어 마운트 된 후 바로 드라이브 포멧 화면이 나타고, 포멧 후 바로 사용이 가능하다.

3. Create 버튼을 누르면 마운트 할때 사용할 비밀번호 입력화면이 나타난다.

4. 비밀 번호 입력 후 나타는 화면에서 마우스를 마구 움직이거나 키보드를 마구 두드려서 암호화 시드를 생성한다.
(OK 버튼이 활성화 될 때까지 가능한한 마구 두들기자.. ^^)

5. 드디어 컨테이너가 마운트 되고 포멧 화면이 나타났다.
6. 이제 포멧 후 이동식 디스크로 사용하면 된다. ^^

마운트 이후 트레이 메뉴의 변화 모습

### setting.ini 설정 ###

Data폴더 안에 있는 setting.ini 파일을 이용해 마운트할 파일을 지정하거나 드라이브명을 지정하여 사용할 수 있다.
setting.ini 파일이 없을 경우 BCTraveller Loader.exe를 실행하면 자동으로 생성되며, 이때 생성되는 항목은 Use와 Count 2개 항목이 '0' 값으로 설정된다.

아래는 ini 항목 설정 방법이다.
[Default]
Use : 기본값은 0으로 설정되어 있으며, 값이 0일 경우 setting.ini를 사용하지 않고 Data 폴더 안의 모든 jbc 파일을 HDD 이후 비어있는 드라이브명 부터 순서대로 마운트 한다. 1로 설정되어 있을 경우 [Container] 컬럼의 설정에 따라 동작한다.

[Container]
Count : 마운트할 컨테이너 개수를 지정한다. 0일 경우 컨테이너를 마운트 하지 않고 실행된다.
Container1 : 마운트될 컨테이너 파일 명을 지정한다.
Drive1 : 드라이브명을 고정하여 사용하고자 할 경우 입력한다. 비어있을 경우 순서대로 할당 받는다. (h: 형태로 기입)
Count 에 입력한 숫자 만큼 Container 및 Drive를 작성하여 주면 된다.
예를 들어 Count=2 로 설정하였을 경우

Count=2
Container1=MyDisk.jbc
Drive1=
Container2=Mydisk2.jbc
Drive2=y:

위와 같이 등록하면 됨.

BCTraveller Loader.exe가 실행되어 있는 상태에서 다시 실행하면 프로그램을 종료 시킬지 확인 후 종료한다. 이 때 마운트 되어있는 모든 컨테이너들을 마운트 해제하고 종료한다.(강제 종료)


----------- Cut Here 2009.02.11 ----------------------------------------------------------------------------------
로더 소스 일부를 수정했습니다. 여러 jbc파일을 마운트 할 때 마운트 중에 오류가 발생하는 경우가 있어.. Best Crypt에서 패스워드 창이 나타날때까지 WinWait함수로 기다리도록 수정했습니다.(딜레이 시간 설정 3초 - 3초정도면 넉넉할 듯 하더군요..)

스플래시 이미지 적용해 봤습니다.

----------- Cut Here 2009.02.13 ----------------------------------------------------------------------------------
스플래시 이미지 적용을 INI 설정으로 변경합니다.
INI 파일에서 [Default] 아래에 Splash=1로 값을 주면 됩니다.
설정값이 1일 경우 스플래시 이미지가 나타나며, 0일 경우에는 이미지 없이 바로 시작합니다.

2009년 2월 9일 월요일

C#으로 본 자료운용 구조[DFS와 BFS 비교]

얼마전 파일 검색 함수를 작성해 보면서 탐색 방법에 대한 고찰을 하게 되었다.

폴더에 대한 검색..

서브 폴더를 포함한 검색을 하며 검색되는 속도에 의해 얼마나 느려 질 수 있는지...

처음 사용하던 탐색 방법은 DFS(Depth First Search - 깊이 우선 방식)으로 Stack 구조의 재귀함수를 사용하는 방법이다.

아래는 C#으로 만들어본 DFS 방식의 파일 검색 함수이다.

private List DirSearch(string sDir, string extName)
{
    List tmpList = new List();

    try
    {
        foreach (string f in Directory.GetFiles(sDir, extName))
            tmpList.Add(f);
        foreach (string d in Directory.GetDirectories(sDir))
        {
            tmpList.AddRange(DirSearch(d, extName).ToArray());
        }
    }
    catch (Exception excpt)
    {
        MessageBox.Show(excpt.Message);
        //return tmpList;
    }

    return tmpList;
}


자주 다니는 사이트에서 BFS(Breadth First Search - 너비 우선 방식)을 알게되어 이를 운용해 봤는데 확실히 이 방법이

빠른 속도를 보인다. 다만.. 저장공간 사용량이 DFS에 비해 많다는 것...

하지만 요즘 PC들이 메모리가 좀 많은가... 많이 쓴다고 해봤자 메모리양에 비하면 새발의 피지... ㅎㅎ

아래는 BFS 방식의 파일 검색 함수 예제이다.

private List DirSearch(string sDir, string extName)
{
	List tmpDir = new List();
	List fileList = new List();

	int head = 0, tail = 0;
	tmpDir.Add(sDir);
	tail++;

	while (head != tail)
	{
		try
		{
			foreach (string d in Directory.GetDirectories(tmpDir[head]))
			{
				tmpDir.Add(d);
				tail++;
			}
			
			foreach (string f in Directory.GetFiles(tmpDir[head++], extName))
				fileList.Add(f);
		}
		catch (Exception excpt)
		{
			MessageBox.Show(excpt.Message);
			//return tmpList;
		}
	}
	return fileList;
}


좀.. 당황스러운건... C#으로 두 함수를 만들어 비교해 봤지만...

시간 차이가 거의 없다는 것... ㅡ_ㅢ;;;

나 실패한건가 T^T

2009년 2월 7일 토요일

스마트 클라이언트 만들기 첫 경험........

항상 인스톨쉴드 형태로 배포하고 사용하다 처음으로 스마트 클라이언트로 프로그램을 배포하는 경험을 했다..
고객측에서 웹페이지에 링크를 해달라는 요청....

무슨소린가 하고 다른 프로젝트 쪽에 확인해보니...
ClickOnce로 만들어 달라는 것이군...;;

두 시간 동안 자료 뒤지고.. 간단하게 웹서버 만들어서 무작정 따라해봤으나 ㅡㅡ;
DLL들 설치나... 게시할때 SSL 사용여부 등에 따라 ㅡㅡ;
아우.. ㅡ_ㅢ;;;
하루 날렸다 ㅡㅡ;

그나마 다행히 ClickOnce가 어떻게 돌아가는지는 이해했으니...;;;
안그럼..
 캐안습이었겠지 ㅡㅡ;

MS 스마트 클라이언트 아파치에서 실행 문제 해결

Clickonce로 배포한 프로그램이 아파치에서 실행을하면 xml태그가 표시되는 경우가 있다.

이 때는 프로그램이 게시되어 있는 폴더에 ".htaccess"라는 파일을 생성하고,
(이미 있다면 파일 하단에 추가)

아래 내용을 추가하여 저장합니다.

AddType application/x-ms-application application
AddType application/x-ms-manifest manifest
AddType application/octet-stream deploy

아파치를 재시작하고 다시 접속해 보면....
성공!!!