Chapter7. 도큐먼트와 파일 입출력 2006. 10. 24 이 학 주.

Slides:



Advertisements
Similar presentations
Visual C++ Programming Document/View Architecture Department of Digital Contents Sang Il Park.
Advertisements

목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
ㅎㅎ 구조체 구조체 사용하기 함수 매개변수로서의 구조체 구조체 포인터와 레퍼런스 구조체 배열.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
Image & Video processing
제14장 동적 메모리.
Power Java 제3장 이클립스 사용하기.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
인공지능실험실 석사 2학기 이희재 TCP/IP Socket Programming… 제 11장 프로세스간 통신 인공지능실험실 석사 2학기 이희재
C 프로그래밍 I.
윤 홍 란 다이알로그(대화상자) 윤 홍 란
데이터 파일 C 데이터 파일과 스트림(Stream) 텍스트 파일 처리
조 병 규 Software Quality Lab. 한국교통대학교
윤성우의 열혈 C 프로그래밍 윤성우 저 열혈강의 C 프로그래밍 개정판 Chapter 12. 포인터의 이해.
제 6장. 생성자와 소멸자 학기 프로그래밍언어및실습 (C++).
5장. 참조 타입.
제 3장. C보다 나은 C++ II.
07. 디바이스 드라이버의 초기화와 종료 김진홍
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Visual C++ Programming Output and File
11장. 포인터 01_ 포인터의 기본 02_ 포인터와 Const.
8장 함수 함수의 필요성 라이브러리 함수와 사용자 정의 함수 함수의 정의, 원형, 호출 배열을 함수 인자로 전달 재귀호출.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
23장. 구조체와 사용자 정의 자료형 2.
부트로더와 Self Programming
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
13. 연산자 오버로딩.
C 2장. C 프로그램 시작하기 #include <stdio.h> int main(void) { int num;
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
Java의 정석 제 5 장 배 열 Java 정석 남궁성 강의 의
2장. 데이터베이스 관리 시스템 데이터베이스 관리 시스템의 등장 배경 데이터베이스 관리 시스템의 정의
영상처리 실습 인공지능연구실.
24장. 파일 입출력.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
Nessus 4 설치 정보보호응용 조용준.
School of Electronics and Information. Kyung Hee University.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
IOCP 2005/11/10.
컴퓨터 프로그래밍 기초 - 8th : 함수와 변수 / 배열 -
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
법령안편집기 연결버튼 표시가 안 될 경우 정부입법지원센터( 입안 및 심사안을 진행시
PMIS 서버 설정 환경설정 작성자 : 배경환.
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
DK-128 직렬통신 기초 아이티즌 기술연구소
네트워크 환경 구축과 이미지 전송 호스트/타겟 통신 직렬 통신을 이용한 이미지 전송 수퍼 데몬 BOOTP 환경 구축
Canary value 스택 가드(Stack Guard).
^^ Computer Programming 2 dmpr.cnu.ac.kr/~daygax.
수동 설치시는 설치 방법 1. 두번에 설치 CD 속에 fscommand 폴더 밑에 Osstem 이라는 폴더를
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
13주 실습강의 학기, 소프트웨어 설계 및 실험(Ⅰ).
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
함수, 모듈.
MIDP 네트워크 프로그래밍 ps lab 김윤경.
1. 입력 데이터 ② 대학, 학과: 대학이 존재하지 않을 경우 학과명을 대학에 입력 학과명은 공백으로 유지 (하단 참조)
구조체(struct)와 공용체(union)
9 브라우저 객체 모델.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
Chapter 12 파일 입출력.
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
엔코더 프로그램 설명 // 쓰레드를 사용하기 때문에 변수와 핸들을 전역변수로 지정 HANDLE hDevice;
06. 디바이스의 등록과 해제 김진홍
CHAP 15. 데이터 스토리지.
개정판 누구나 즐기는 C언어 콘서트 제13장 동적 메모리 출처: pixabay.
버스와 메모리 전송 버스 시스템 레지스터와 레지스터들 사이의 정보 전송을 위한 경로
7 생성자 함수.
6 객체.
Presentation transcript:

Chapter7. 도큐먼트와 파일 입출력 2006. 10. 24 이 학 주

목차 Cdocument클래스. CEditView와 CRichEditView SDK 파일 입출력 CFile 도큐먼트 클래스에서 파일 입출력 Serialize() 함수 CEditView와 CRichEditView Ceditview CRichEditView SDK 파일 입출력 CFile

1. Cdocument클래스 템플릿를 구성하는 4개의 클래스중에서 데이터를 저장하거나 로드하는 클래스. 템플릿를 구성하는데 필수적인 클래스. 프로그램을 작성할 때는 두 가지 부분. 필요한 정보 데이터. 이 데터를 사용자가 쉽게 분석할 수 있는 화면처리. 이 두 부분에서 도큐먼트 클래스는 필요한 정보 데이터를 파일에 저장하거나 로드하는 부분을 담당.

도큐먼트 클래스에서 파일 입출력. 그림1-7-1.파일 입출력 전체 구성도

Serialize() 함수(1) 파일을 저장하거나 오픈할 경우 최후에 데이터가 저장되는 부분은 Serialize함수에 의해서 설정. 도큐먼트 클래스의 Serialize 함수. void CExMyEdit2Doc::Serialize(CArchive& ar) {        if (ar.IsStoring())        {        //파일 저장부분        }        else        //파일 열기 부분 }

Serialize() 함수(2) Serialize함수는 인자로 CArchive 클래스의 변수인 ar 이 인자로 넘어옴. 도큐먼트 클래스에서 OnOpenDocument 함수가 수행되면 Serialize함수가 실행 . OnOpenDocument나 또는 OnSaveDocument 두 개의 함수내부에서는 CFile클래스를 이용하여 파일을 오픈. 파일을 오픈 한 다음 파일과 메모리간에 데이터 전송 통로를 만들어주는데 이 전송 통로가 바로 CArchive입니다.

Serialize() 함수(3) 예) Serialize에 “안녕하세요”라는 문자열을 입출력. void CExMyEdit2Doc::Serialize(CArchive& ar) {        CString data="안녕하세요“;        if (ar.IsStoring())        {        //파일 저장부분          ar << data;        }        else        //파일 열기 부분          ar >> data; }

Serialize() 함수(4) CArchive 클래스의 맴버 함수인 IsStoring함수는 현재 저장 형태로 연결되었을 경우 TRUE를 리턴. 위의 예는 현재 저장형태 이면 data를  ar로 리다이렉션 시킨 것 입니다. ar << data;가 바로 이런 의미. 이렇게 되면 data의 값이 바로 ar로 들어가게 되고 ar자체는 하나의 파이프라는 개념이므로 이파이프를 통해서 파일로 전달되게 되는 것. 열기 형태로 연결되었을 경우 FALSE를 리턴. 만일 현재 오픈상태로 연결 되었을 경우에는  ar >> data; 함수를 이용하여 파이프와 연결된 파일에서 문자열을 얻어서 data라는 변수에 저장하게 되는 것

2. CEditView와 CRichEditView 뷰 클래스의 base 클래스를 CEditView로 한다. 메뉴에서 파일 입출력을 실행시키면 뷰 클래스의 전체 내용이 적용된다. 메뉴의 편집 기능이 활성화 된다. 메뉴의 프린트 기능이 활성화 된다. 뷰 클래스의 내용이 바뀌면 프로그램 종료시 저장 여부를 물어본다. Document type이 single 또는 multiple 모두에 적용된다. 뷰 클래스의 base 클래스를 CEditView

2. CEditView와 CRichEditView 뷰 클래스의 base 클래스를 CRichEditView로 한다. 뷰 클래스의 base 클래스를 CRichEditView

3. SDK 파일 입출력 SDK(Software Development Kit) 응용 프로그램의 개발을 간편하고 용이하게 하기 위해 프로그래머에게 유상이나 무상으로 제공되는 개발 도구. 프로그래머들이 솔루션 개발 시 자사의 응용 프로그램 인터페이스(API)를 채택하게 하기 위한 목적으로 대부분 무료로 제공된다. 개발 도구 및 라이브러리, 관련 도큐멘트, 개발 툴 등으로 구성.

파일 만들기와 열기 파일 만들기와 열기를 위해서 사용하는함수는 CreateFile. CreateFile의 기본형태. HANDLE CreateFile(  LPCTSTR lpFileName,          // 파일명 문자열 포인터  DWORD dwDesiredAccess,       // 읽기 쓰기 접근모드  DWORD dwShareMode,           // 공유 모드  LPSECURITY_ATTRIBUTES lpSecurityAttributes,                                // 보안 구조체 포인터   DWORD dwCreationDisposition,  //파일 생성 플러그   DWORD dwFlagsAndAttributes,  // 파일 속성 플러그   HANDLE hTemplateFile  );         // 파일 속성을 복사할 핸들 포인터

CreateFile()의설명(1) lpFileName: 파일명 이곳에 파일명의 설명을 설정하면 해당 파일을 만들거나 오픈하고, 시스템 포트를 설정하면 해당 포트를 오픈. dwDesiredAccess: 읽기/쓰기 접근 모드. 이 모드값이 GENERIC_READ이면 읽기용이며, GENERIC_WRITE이면 쓰기용. 이 둘값을 OR연산으로 설정하면 읽기와 쓰기 모드가 동시에 가능. dwShareMode: 공유 모드값. 공유 모드란 현재 파일이 오픈 상태일 때 다른 유저들의 접근 허용을 설정하는 모드. 특정 파일을 오픈 하였을 때 이 파일이 다른 쪽에서 오픈 할 수 없도록 접근을 막는 경우. 이렇게 해야만 데이터를 정확하게 보존. FILE_SHARE_READ이면 읽기를 공유, FILE_SHARE_WRITE이면 쓰기를 공유.

CreateFile()의설명(2) lpSecurityAttributes: 보안에 대한 구조체 변수. 보통 Window NT에서 사용 권한자 모들를 설정하기 위한 구조체로서 윈도98에서는 NULL을 사용하여 이 부분을 무시합니다. dwCreationDisposition: 파일이 존재하는 것을 오픈할 것인지, 아니면 새로 만들 것인가에 대한 플러그. CreateFile의 dwCreationDisposition 인자에 값을 설정하여 오픈과 생성을 결정. 이 플러그값이 CREATE_NEW이면 새로 파일을 만든다는 의미. 이 플러그를 사용했을 때 현재 파일이 존재하면 새로 만들지 않고 에러를 리턴. 현재 존재하는 파일을 무시하고 파일을 만들고자 할 경우에는 CREATE_ALWAYS 플러그를 사용. 존재하는 파일을 오픈하고자 할 경우에는 dwCreationDisposition값에 OPEN_EXISTING 플러그를 사용.

CreateFile()의설명(3) dwFlagsAndAttributes: 그 밖의 파일 속성을 설정하는 플러그. 플 러 그 설 명 FILE_ATTRIBUTE_ARCHIVE 현재 파일이 archived 된다는 의미 이플러그를 설정하면 현재 파일이 이동되거나 사라졌을경우 이때의 상태를 마크한다. FILE_ATTRIBUTE_HIDDEN 감추어져 있는 형태 FILE_ATTRIBUTE_NORMAL 일반 파일 FILE_ATTRIBUTE_OFFLINE 현재 파일을 다른 곳에서 사용하기가 불가능한 상태로 설정 FILE_ATTRIBUTE_READONLY 읽기 전용파일 FILE_ATTRIBUTE_SYSTEM 시스템 파일

CreateFile()의설명(4) hTemplateFile: Windows 95에서는 사용하지 않고 NULL로 설정, NT에서는 읽기 전용으로 파일을 오픈하였을 때 오픈하고자 하는 핸들을 hTemplateFile에 설정. CreateFile을 이용하여 “test.dat”라는 파일을 오픈하고자 할 경우. HANDLE fd=CreateFile("test.dat",GENERIC_READ|GENERIC_WRITE,        0,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); 현재 존재하는 파일을 오픈하고자 할 경우.                         0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);

파일에 읽고 쓰기 파일에서 데이터를 읽고자 할 경우에는 ReadFile 함수를 사용. ReadFile 함수의 기본형태 BOOL ReadFile(  HANDLE hFile,     // 파일 핸들 LPVOID lpBuffer,    // 읽고자 하는 데이터를 저장 버퍼 포인터 DWORD nNumberOfBytesToRead,  // 읽고자 하는 데이터의 길이 LPDWORD lpNumberOfBytesRead ,  // 읽혀진 데이터 길이 LPOVERLAPPED lpOverlapped   // OVERLAPPED 구조체 포인터);

ReadFile()의 설명 hFile: 읽고자 하는 파일 핸들. lpBuffer: 읽은 데이터가 저장되는 버퍼. CreateFile에 의해서 리턴된 핸들을 의미. lpBuffer: 읽은 데이터가 저장되는 버퍼. nNumberOfBytesToRead: 읽고자 하는 데이터 길이. nNumberOfBytesToRead값은 함수 사용시 설정하는 값. lpNumberOfBytesRead: 읽혀진 데이터의 길이. lpNumberOfBytesRead값은 함수가 실행된 후 리턴된 값. lpOverlapped: OVERLAPPED 구조체 포인터. 주로 파이프를 이용한 프로그램을 작성하거나 통신 포트에 데이터를 쓰고자 할 때 사용하는 구조체.

파일에 쓰기 파일에 데이터를 쓰고자 할 경우 WriteFile 함수를 사용. WriteFile 함수의 기본 형태. BOOL WriteFile(  HANDLE hFile,               // 파일 핸들러 LPCVOID lpBuffer,           // 쓰고자 하는 데이터가 설정된 버퍼 포인터 DWORD nNumberOfBytesToWrite,  // 쓰고자 하는 데이터 길이 LPDWORD lpNumberOfBytesWritten,//쓰여진 데이터길이 LPOVERLAPPED lpOverlapped   //OVERLAPPED 구조체 포인터);

WriteFile()의 설명 hFile: 쓰고자 하는 파일 핸들러. lpBuffer: 쓰고자 하는 데이터가 있는 버퍼 포인터. nNumberOfBytesToWrite: 쓰고자 하는 데이터 길이. lpNumberOfBytesWritten: 파일에 기록하였을 때 실제 기록된 길이. lpOverlapped: OVERLAPPED 구조체 포인터.

파일 닫기 CloseHandle을 사용. CloseHandle()의 기본 형태. CloseHandle()의 설명. BOOL CloseHandle(  HANDLE hObject); CloseHandle()의 설명. hObject: CreateFile에 의해서 설정된 핸들값.

4. CFile 클래스 파일 열기와 만들기. 파일을 열거나 만들 경우 CFile 에서는 생성자나 Open 함수를 이용.

CFile를 이용한 파일 입출력 (1) 1.도큐먼트 클래스에 파일 정보를 저장할 메모리 포인터 변수를 선언한다.    Class - CTestDoc - Insert member variables - HGLOBAL m_hMem    CTestDoc::CTestDoc() { m_hMem = NULL; } 2.메모리에 공간을 확보한다. 3.도큐먼트 클래스의 OnOpenDocument()를 overriding한다.    ClassWizard - CTestDoc - OnOpenDocument() 4.CFile 객체를 만든다.    CFile file; 5.OnOpenDocument에서 입력된 파일 이름으로 파일을 연다.    file.Open(lpszPathName,CFile::modeRead); 6.파일 크기를 알아낸다.    DWORD dwFilesize=file.GetLength(); 7.파일 크기만큼 메모리를 확보한다.    m_hMem = GlobalAlloc(GHND,dwFilesize); 8.확보된 메모리의 포인터를 고정시킨다.    LPSTR lpText = (LPSTR)GlobalLock(m_hMem);

CFile를 이용한 파일 입출력 (2) 9.파일을 읽어 메모리에 채운다. 또는 메모리의 내용을 파일에 쓴다.    file.ReadHuge(lpText,dwFilesize);    file.WriteHuge(lpText,dwFilesize); 10.고정되었던 메모리를 이동할 수 있게 푼다.    GlobalUnlock(m_hMem); 11.파일을 닫는다.    file.Close(); 12.메모리의 내용을 사용하려면, 메모리를 고정시킨다.    LPSTR lpText = (LPSTR)GlobalLock(pDoc->m_hMem); 13.할당된 메모리의 크기를 알아내려면, GlobalSize()를 사용한다.    DWORD dwFilesize = GlobalSize(pDoc->m_hMem); 14.윈도우의 크기를 알아내려면, GetClientRect()를 사용한다.    RECT rect; GetClientRect(&rect); 15.메모리의 내용을 CView에 문자들로 출력하려면, DrawText()를 사용한다.    pDC->DrawText(lpText,dwFilesize,&rect,DT_EXPANDTABS); 16.메모리의 내용을 사용했으면, 메모리의 고정을 푼다.    GlobalUnLock(pDoc->m_hMem); 17.프로그램이 종료되면 메모리를 해제한다.    GlobalFree(pDoc->m_hMem);