MFC에서 파일 입출력을 어떻게 할 것인가를 다룸.
<그림 1 :: 좌표 파일>
<그림 1>은 좌표를 파일에 담은 모습을 하고 있다.
txt파일로 옮기되, 확장자는 ~.dat 로 바꿔준다.
아마 모든 파일 변환은 <그림 1>의 좌측에 보이는 ~.dat 파일로 한번씩 변화 될 것이다.
<그림 2 :: Doc 클래스의 첫 수정>
Frame 클래스는 프로그램의 제목을 바꾸기 위해서, View 클래스는 OpenGL의 성능을 향상시키기 위해서 변환시켜보았지만,
Docu 클래스의 조작은 처음일 것이다.
일반적으로 Docu 클래스는 문서의 임시 저장과 파일의 Input / Output을 담당한다. (사실 필자도 구체적으로자세하게는 모른다...)
여기까지 하고, 첨부파일에있는 실행파일을 실행시키고, 저장과 읽기를 해보자. (새로 만들기가 아니다!!)
코드에 입력한 대로 메시지박스가 뜨는 것을 볼 수 있다...!
<그림 3 :: 직렬화 공부>
<그림 3>은 이 기능 한번 구현해보고자 책을 독학한 흔적을 보여주고 있다...
수 백 페이지를 몇 일만에 독학할 수 있었던 속도의 근본은, 김동근 교수님께 빡시게 배워놓은 API 때문인 것 같다...
아무튼 필자는 사실 이 직렬화(Serialize) 개념을 진즉에 알고 있었지만, 직접 시현해 보기는 처음이다.
(물론 노예처럼 따라해본적은 있다. 요컨데, 직접 이 기능을 내 입맛대로 사용하는 경험은 처음이라는 것이다.)
알고 있었으면서 왜 사용하지 않고 차일 피일 미루다가 이제야 시도하느냐!! 란 질문에,
"C를 알고 있지만 C++, API, MFC, OpenGL까지 해야 한다는 사실을 접했을 때의 그 귀찮음과 절망감과 맞먹는 감정을 느꼈기 때문." 이라고 답하겠다.
똥을 무서워서 피하나? 드러워서 피하지...
난 여지껏 이 영역에 손대는 것에 그것과 비슷한 감정을 갖고 있었다.
그 감정의 근본은 최근에 API로 Drag & Drop을 구현해 보았기 때문... 이라고 할 수 있겠다. ㅋㅋㅋ
쉬울 줄 알았는데, 알 수 없는 코드들을 한줄한줄 계속 추가하게 되고, 알 수 없는 에러를 수차례 봐야 했던 그 더러운 경험 ㅋㅋㅋ
각설하고 다시 진도를 진행하겠다.
일단 Nurbs curve는 u, v의 좌표개념을 사용하면서, x,y,z 좌표개념을 포함하고 있다.
즉 좋든 싫든 좌표 개념이 u, v로 나와야 하고, 가능하다면 3D scanning data는 예측 할 수 있는 숫자로 정렬 되어 있어야 한다.
<그림 4 :: 임시 수정>
<그림 4>로 Doc 클래스의 코드를 수정한 모습을 볼 수 있다.
MFC를 조금 아시는 분이 보면 상당히 의아해 할 수 있는 모습일텐데, 왜 MFC가 제공하는 CArchive 클래스를 제대로 활용하지 않았냐면,
txt 파일 포맷으로 제대로 출력이 나가지 않았기 때문이다.
<그림 5 :: 출력 내용 "신동석 rn shin">
<그림 5>는 CArchive 클래스를 활용하여 문자열을 출력했던 파일을 열은 모습을 보여주고 있다.
전체적으로 Unicode의 영향을 받아서 그런지, 알파벳은 한칸씩 띄워져 있는 모습을 볼 수 있으며 한글은 알아볼 수도 없는 형태가 되었다.
Unicode에서 unUnicode의 변환이 그리 녹록하지 않다는 증거이다. ( CArchive 클래스의 활용은 정말 함들군요 -_- )
그래서 CArchive 클래스는 파일의 기본 외적인 것(파일명, 파일경로, 파일 확장자)의 정보를 얻을때만 사용하고
내부적으로는 CFile 클래스를 사용하기로 했다.
<그림 6 :: Serialize 함수의 수정>
<그림 6>은 저장 및 불러오기에 대한 과정의 수정된 코드를 보여주고 있다.
CArchive 클래스에 전적으로 의존하지 않고, CFile 클래스에 의존하는 모습을 볼 수 있다.
필자도 상당히 이 상황이 어이가 없지만, 편의를 위해서는 이렇게 할 수 밖에 없다.
<그림 6>에서 수정된 코드의 내용은 다음과 같다.
저장 : "인증샷 (한줄 넘고) 신동석 "을 출력한다.
불러오기 : 해당파일의 확장자까지 포함된 제목을 메시지박스로 띄운다.
<그림 7 : Open>
<그림 8 : Open 결과>
<그림 9 : 저장>
<그림 10 : 저장 결과>
<그림 1>의 방식을 전혀 사용하지 않아서 상당히 무안한데,
아무튼 파일 입출력에 대한 스트림에 대한 이해는 이 정도로 끝내도 무난 할 것 같다.