Microsoft PowerPoint - chap12.ppt [호환 모드]

Similar documents
설계란 무엇인가?

쉽게 풀어쓴 C 프로그래밍

12 장파일입출력 파일입출력의기초파일열기, 사용하기, 닫기파일입출력모드문자단위파일입출력텍스트파일과이진파일 read, write 함수에의한이진파일입출력임의접근입출력스트림상태입출력연산자오버로딩과파일입출력 C++ 프로그래밍입문

설계란 무엇인가?

PowerPoint 프레젠테이션

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

Microsoft PowerPoint - ch07 - 포인터 pm0415

Microsoft PowerPoint - chap11.ppt [호환 모드]

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

(Microsoft PowerPoint - 11\300\345.ppt [\310\243\310\257 \270\360\265\345])

PowerPoint 프레젠테이션

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

Microsoft PowerPoint - [2009] 02.pptx

PowerPoint 프레젠테이션

PowerPoint Presentation

C++ Programming

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

PowerPoint 프레젠테이션

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

2) 활동하기 활동개요 활동과정 [ 예제 10-1]main.xml 1 <LinearLayout xmlns:android=" 2 xmlns:tools="

11장 포인터

Microsoft PowerPoint - chap13-입출력라이브러리.pptx

학습목차 2.1 다차원배열이란 차원배열의주소와값의참조

Microsoft PowerPoint - C++ 5 .pptx

PowerPoint Presentation

Microsoft PowerPoint - chap06-1Array.ppt

금오공대 컴퓨터공학전공 강의자료

Microsoft PowerPoint - 알고리즘_3주차_2차시.pptx

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

Microsoft PowerPoint - chap06-2pointer.ppt

PowerPoint 프레젠테이션

PowerPoint Presentation

PowerPoint Presentation

BMP 파일 처리

제1장 Unix란 무엇인가?

비트와바이트 비트와바이트 비트 (Bit) : 2진수값하나 (0 또는 1) 를저장할수있는최소메모리공간 1비트 2비트 3비트... n비트 2^1 = 2개 2^2 = 4개 2^3 = 8개... 2^n 개 1 바이트는 8 비트 2 2

슬라이드 1

KNK_C_05_Pointers_Arrays_structures_summary_v02

목차 포인터의개요 배열과포인터 포인터의구조 실무응용예제 C 2

14장 파일

슬라이드 1

PowerPoint 프레젠테이션

PowerPoint Template

쉽게 풀어쓴 C 프로그래밍

17장 클래스와 메소드

문서의 제목 나눔고딕B, 54pt

금오공대 컴퓨터공학전공 강의자료

강의 개요

C++ Programming

윤성우의 열혈 TCP/IP 소켓 프로그래밊

Microsoft PowerPoint 자바-기본문법(Ch2).pptx

1.2 자료형 (data type) 프로그램에서다루는값의형태로변수나함수를정의할때주로사용하며, 컴퓨터는선언된 자료형만큼의메모리를확보하여프로그래머에게제공한다 정수 (integer) 1) int(4 bytes) 연산범위 : (-2 31 ) ~ (2 31 /2)-

Slide 1

Microsoft Word - Crackme 15 from Simples 문제 풀이_by JohnGang.docx

PowerPoint Presentation

제12장 파일 입출력

본 강의에 들어가기 전

Microsoft PowerPoint - Chap12-OOP.ppt

1. auto_ptr 다음프로그램의문제점은무엇인가? void func(void) int *p = new int; cout << " 양수입력 : "; cin >> *p; if (*p <= 0) cout << " 양수를입력해야합니다 " << endl; return; 동적할

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

파일로입출력하기II - 파일출력클래스중에는데이터를일정한형태로출력하는기능을가지고있다. - PrintWriter와 PrintStream을사용해서원하는형태로출력할수있다. - PrintStream은구버전으로가능하면 PrintWriter 클래스를사용한다. PrintWriter

API 매뉴얼

02장.배열과 클래스

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63234C0E520C0D4C3E2B7C228B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

2007_2_project4

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - chap07.ppt [호환 모드]

Microsoft PowerPoint - e pptx

PowerPoint Presentation

C 프로그램의 기본

Microsoft PowerPoint - 04-UDP Programming.ppt

chap7.key

chap 5: Trees

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

금오공대 컴퓨터공학전공 강의자료

OCW_C언어 기초

Microsoft PowerPoint 웹 연동 기술.pptx

설계란 무엇인가?

Microsoft PowerPoint APUE(Intro).ppt

Microsoft PowerPoint - C프로그래밍-chap03.ppt [호환 모드]

임베디드시스템설계강의자료 6 system call 2/2 (2014 년도 1 학기 ) 김영진 아주대학교전자공학과

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

1. C++ 표준라이브러리의구성 C++ 표준라이브러리의구성 본교재를통해소개할라이브러리 범주설명예관련장 / 절 입출력 표준입출력 파일입출력 ostream ofstream 11.2~11.9 절 12 장 문자열문자열처리 string 절 수치계산수치계산관련 comp

5장. JSP와 Servlet 프로그래밍을 위한 기본 문법(완성-0421).hwp

OCW_C언어 기초

Microsoft PowerPoint - chap03-변수와데이터형.pptx

PowerPoint Template

The Pocket Guide to TCP/IP Sockets: C Version

Microsoft PowerPoint - additional01.ppt [호환 모드]

쉽게

PowerPoint Template

슬라이드 1

슬라이드 1

API 매뉴얼

JVM 메모리구조

Microsoft PowerPoint - 제11장 포인터(강의)

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Transcription:

12 장파일입력과출력 C++ 로시작하는객체지향프로그래밍 1

강의목표 출력에 ofstream(12.2.1) 과입력에 ifstream(12.2.2) 사용. 파일의존재여부테스트 (12.2.3). 파일의끝 (end of file) 테스트 (1224) (12.2.4). 원하는형식으로데이터쓰기 (12.3). getline, get, put 함수를사용하여데이터읽고쓰기 (12.4). 데이터읽고쓰는데 fstream 객체사용 (12.5). 지정된형식으로파일열기 (12.5). 스트림상태를테스트하기위해 eof(), fail(), bad(), good() 함수사용 (12.6). 텍스트 (text) 입출력과이진 (binary) 입출력의차이점이해 (12.7). write 함수를사용한이진데이터쓰기 (12.7.1). read 함수를이용한이진데이터읽기 (1272) (12.7.2). reinterpret_cast 연산자를사용하여문자배열로원시유형값과객체의형변환 (12.7). 배열과객체읽고쓰기 (12.7.3 12.7.4). 임의파일접근 (random file access) 을위해서파일포인터이동에 seekp 와 seekg 함수사용 (12.8). 파일내용갱신 (update) 을위해입력과출력상태로파일열기 (12.9). C++ 로시작하는객체지향프로그래밍 2

파일로데이터쓰기 ofstream 클래스는텍스트파일로원시데이터유형값, 배열, 문자열, 객체를쓰는데사용된다. 리스트 12.11 은파일에데이터를쓰는방법을설명하고있다. 프로그램은 ofstream의인스턴스를생성하고 scores.txt t 파일에두줄을쓴다. 각줄은이름 ( 문자열 ), 중간이름이니셜 ( 문자 ), 성 ( 문자열 ), 점수 ( 정수 ) 로이루어져있다. TextFileOutput Run C++ 로시작하는객체지향프로그래밍 3

파일로데이터쓰기 output << "John" << " " << "T" << "Smith" << " " << 90 << endl; scores.txt 파일 John T Smith 90 Eric K Jones 85 output << "Eric" << " " << "K" << "Jones" << " " << 85 << endl; C++ 로시작하는객체지향프로그래밍 4

파일닫기 close() 함수 (18 번줄 ) 는객체스트림을 닫는데사용되는데, 만약이함수가 호출되지않는다면데이터가파일에 적절하게저장되지못할수도있다. C++ 로시작하는객체지향프로그래밍 5

파일이존재? 만약파일이이미존재한다면파일의내용이경고없이지워질것이다. C++ 로시작하는객체지향프로그래밍 6

절대경로파일이름 모든파일은파일시스템에서디렉토리 ( 폴더 ) 에존재한다. 절대경로파일이름 (absolute file name) 은드라이브이름과완전한경로를나타내는파일이름이다. 예를들어, c: example scores.txt는 Windows 운영체제에서 scores.txt 파일에대한절대경로파일이름이된다. 여기서 c: example은파일이저장된디렉토리 ( 폴더 ) 경로이다. 절대경로파일이름은컴퓨터시스템에따라다른데, UNIX 시스템에서는절대경로파일이름을 /home/liang/example/scores.txt와같이사용한다. 이는 UNIX에서 scores.txt 파일이 /home/liang/example 디렉토리에존재한다는것이다. C++ 로시작하는객체지향프로그래밍 7

파일이름에서의 Windows 에서디렉토리 ( 폴더 ) 구분자는백슬래시 (\, ) 이다. 백슬래시는 C++ 에서는특별한문자이기때문에문자열리터럴에서는 \\ 나 로사용되어야한다 ( 표 2.5 참조 ). 예를들어, output.open("c: example scores.txt"); 와같이사용해야한다. C++ 로시작하는객체지향프로그래밍 8

상대경로파일이름 절대경로파일이름은플랫폼에의존적이라서드라이브이름이없는상대경로파일이름 (relative file name) 을사용하는것이더좋다. C++ 를실행하기위해서통합 IDE를사용중이라면상대경로파일이름의디렉토리 ( 폴더 ) 는 IDE 안에서지정이가능하다. 예를들어, 데이터파일에대한기본디렉토리 ( 폴더 ) 는 Visual C++ 에서소스코드가존재하는같은디렉토리 ( 폴더 ) 가된다. C++ 로시작하는객체지향프로그래밍 9

파일로부터데이터읽기 ifstream 클래스는텍스트파일로부터데이터를읽기위해사용된다. 리스트 12.2는데이터를읽는방법을설명하고있다. 프로그램은 ifstream의인스턴스를생성하고, scores.txt 파일로부터데이터를읽는다. scores.txt 파일은이전예제에서생성되었다. TextFileInput Run C++ 로시작하는객체지향프로그래밍 10

파일존재여부테스트 만일파일로부터데이터를읽을때파일이존재하고있지않다면, 프로그램의실행후올바르지못한결과를나타낼것이다. 그렇다면프로그램에서파일이존재하고있는지의여부를검사할수있을까? 이는 open 함수를호출한후즉시 fail() 함수를호출함으로써가능하다. fail() 이참을반환하면파일이존재하지않는다는것을의미한다. C++ 로시작하는객체지향프로그래밍 11

파일의끝테스트 리스트 12.2 는데이터파일로부터두줄을읽는다. 파일안에얼마나많은줄이있는지모르고있는상태에서파일안의모든데이터를읽고자할때, 파일의끝을어떻게알수있을까? 이는입력객체에대하여 eof() 함수를호출하면가능하다. 리스트 12.3은 scores.txt 파일로부터모든줄의데이터를읽기위해서리스트 12.2 를수정한것이다. TestEndOfFile Run C++ 로시작하는객체지향프로그래밍 12

데이터형식알기 데이터를올바르게읽기위해서데이터가어떻게저장되어있는지를정확히알아야한다. 예를들어, 리스트 12.3 프로그램에서점수가소수점을가진 double 형값으로저장되어있다면바르게동작하지않을것이다. C++ 로시작하는객체지향프로그래밍 13

출력형식지정 3.12 절 출력형식지정 에서화면으로의출력형식을지정하기위해스트림조절자 (manipulator) 를사용하였다. 파일로의출력형식지정에도같은스트림조절자를사용할수있다. 리스트 12.4 는 formattedscores.txt 파일에대해학생레코드의출력형식을지정하는예이다. WriteFormatData Run C++ 로시작하는객체지향프로그래밍 14

getline,,g get,,put 스트림추출연산자 (stream extraction operator, >>) 를사용하여데이터를읽는것은문제가있는데, 데이터는공백 (whitespace) 으로각각의경계가정해진다. 공백문자가문자열의한부분이라면어떤일이발생하는가? 7.9.3절 문자열읽기 에서공백이있는문자열을읽기위해 getline 함수를사용하는방법을배웠다. 파일에서문자열을읽기위해서도이함수를사용할수있다. getline 함수에대한구문을다시쓰면다음과같다. getline(char array[], int size, char delimitchar) ReadCity Run C++ 로시작하는객체지향프로그래밍 15

getline,,g get,,put 두가지유용한함수로 get 과 put 이있다. 입력객체로문자를읽히기위해서 get 함수를호출하고출력객체로문자를쓰기위해 put 함수를호출할수있다. CopyFile Run C++ 로시작하는객체지향프로그래밍 16

fstream 과파일열기모드 앞절에서데이터를쓰기위해서 ofstream을, 데이터를읽기위해서는 ifstream 을사용하였다. 이를대신하여입력스트림이나출력스트림을생성하기위해 fstream 클래스를사용할수도있다. 만약프로그램이입력과출력모두에대해같은스트림객체를사용해야한다면 fstream 을사용하는것이편리하다. fstream 파일을열기위해서는파일이어떻게사용될것인지를 C++ 에게알려주도록파일모드 (file mode) 를지정해야한다. 파일모드목록이표 12.1에나타나있다. C++ 로시작하는객체지향프로그래밍 17

파일모드 모드 설명 ios::in 입력을위해파일열기. ios::out 출력을위해파일열기. ios::app 파일의끝에출력을추가. ios::ate ios::truct 출력을위해파일을열기. 만약파일이이미존재한다면파일의끝으로 이동. 데이터는파일의아무곳이나쓰기가가능. 파일이미존재한다면파일의내용을버림.( 이는 ios::out 에대해기본동 작임 ) ios::binary 이진입력과출력을위해파일열기. C++ 로시작하는객체지향프로그래밍 18

결합모드 몇몇모드는비트 OR 연산자인 와함께결합될수있다. 비트 OR 연산자에대한자세한사항은부록 D, 비트연산 을보기바란다. 예를들어, city.txt 파일을출력을위해열고데이터를추가하도록하는것은다음문장을실행하면된다 : stream.open( open("city.txt txt", ios::out ios::app); AppendFile Run C++ 로시작하는객체지향프로그래밍 19

스트림상태테스트 스트림의상태를테스트하기위해서 eof() 함수와 fail() 함수를사용했는데, C++ 에서는스트림상태테스트를위한더많은함수를제공하고있다. 각스트림객체는플래그 (flag) 로동작하는일련의비트를가지고있다. 이들비트값 (0 또는 1) 은스트림의상태를나타내주고있는데, 이들비트목록이표 12.2에나타나있다. C++ 로시작하는객체지향프로그래밍 20

스트림상태비트값 비트 ios::eofbit ios::failbit 설명입력스트림의끝을만나면 1 이됨동작이실패하면 1이됨 ios::hardfail 회복할수없는오류가발생하면 1 이됨. ios::badbit 유효하지않은동작이시도될때 1 이됨. ios::goodbit 동작이성공하면 1 이됨. C++ 로시작하는객체지향프로그래밍 21

스트림상태함수 함수 설명 eof() eofbit 플래그가 1 이면참을반환 fail() bad() good() clear() failbit 또는 hardfail 플래그가 1이면참을반환 badbit가 1이면참을반환 goodbit 가 1 이면참을반환모든플래그값을지움 ShowStreamState Run C++ 로시작하는객체지향프로그래밍 22

이진입출력 기술적으로정확한표현은아니지만, 텍스트파일은문자들의연속으로구성되어있고, 이진파일은비트의연속으로구성되어있다고생각할수있다. 예를들어, 10진수 199는텍스트파일안에서는 3개의문자, 1, 9, 9 의연속으로저장되어있고, 이진파일에서는 10진수 199가 16진수 C7(199 = 12 16 1 + 7) 과같으므로바이트유형의값 C7로저장된다. C++ 로시작하는객체지향프로그래밍 23

텍스트와이진입출력 컴퓨터는이진파일과텍스트파일을구분하지않는다. 모든파일은이진형태로저장된다. 따라서모든파일은본질적으로이진파일이다. 텍스트입출력에대해자동적으로부호화 (encoding) 와복호화 (decoding) di 를수행하여텍스트입출력 (I/O) 을이진입출력으로만든다. C++ 로시작하는객체지향프로그래밍 24

ios::binary 이진입출력은변환이필요하지않다. 만약이진입출력을사용하여파일에숫자를쓴다면메모리의값이그대로파일로복사된다. C++ 에서이진입출력을수행하려면 ios::binary 이진모드를사용하여파일을열어야한다. 기본적으로파일은텍스트모드로열린다. 텍스트파일에데이터를쓰기위해서 << 연산자와 put 함수를사용했고, 텍스트파일로부터데이터를읽기위해서는 >> 연산자와 get, getline 함수를사용하였다. 이진파일에서데이터를읽거나이진파일로데이터를쓰기위해서는스트림에 read와 write 함수를사용해야한다. C++ 로시작하는객체지향프로그래밍 25

write 함수 write 함수에대한구문은다음과같다. streamobject.write(char * address, int size) 리스트 12.9는 write 함수를사용하는예를보여주고있다. BinaryCharOutput Run C++ 로시작하는객체지향프로그래밍 26

문자이외데이터쓰기 문자이외의다른데이터를써야할경우, 이를어떻게실행할수있을까? C++ 는이목적을위해 reinterpret_cast를제공하고있다. 이진입출력을위한문자배열포인터로원시유형값이나객체의주소를형변환하기위해이연산자를사용할수있다. 이와같은형변환의구문은다음과같다. reinterpret_cast<datatype>(address) 여기서 address는데이터 ( 원시, 배열, 객체 ) 의시작주소이고, datatype 은변환하려는데이터유형으로서이진입출력에대해서는 char * 가된다. BinaryIntOutput Run C++ 로시작하는객체지향프로그래밍 27

read 함수 read 함수에대한구문은다음과같다. streamobject.read(char * address, int size) city.dat 파일이리스트 12.9 에서생성되었다고가정했을때, 리스트 12.11은 read 함수를사용하여 city.dat 파일로부터문자를읽는프로그램이다. BinaryCharInput Run C++ 로시작하는객체지향프로그래밍 28

문자이외데이터읽기 마찬가지로문자이외의다른데이터를읽기위해서는 reinterpret_cast 연산자를사용해야하는데, temp.dat 파일이리스트 12.10 에서생성되었다고가정하고, 리스트 12.12 프로그램에서는 read 함수를사용하여정수를읽는다. BinaryIntInput Run C++ 로시작하는객체지향프로그래밍 29

이진배열입출력 이절은이진파일로double 값의배열을쓰고, 그파일로부터다시데이터를읽는리스트 12.13 프로그램을설명한다. BinaryArrayIO Run C++ 로시작하는객체지향프로그래밍 30

이진객체입출력 리스트 12.11 은텍스트파일로학생레코드를쓰는프로그램이었다. 학생레코드는이름, 중간이름이니셜, 성, 점수로이루어져있다. 이들필드는파일에구분되어기록되어있다. 데이터의처리를더좋게하기위해서는레코드를모델링하도록클래스를선언하면된다. 각레코드는 Student 클래스의객체이다. Student.h Student.cpp BinaryObjectIO Run C++ 로시작하는객체지향프로그래밍 31

이진객체입출력 ( 계속 ) Student Student.h -firstname: string -mi: char -lastname: string -score: double +Student() +Student(firstName: string, mi: char, lastname: string, score: int) +getfirstname(): string +getmi(): char +getlastname(): string +getscore(): int +setfirstname(s: tn string): ti void +setmi(ch: char): void +setlastname(s: string): void +setscore(score: int): void 학생의이름학생의중간이름이니셜학생의성학생의점수기본 Student 객체생성지정된이름, 중간이름이니셜, 성, 점수로 student 생성학생의이름반환학생의중간이름이니셜반환학생의성반환학생의점수반환학생의새로운이름설정학생의새로운중간이름이니셜설정학생의새로운성설정학생의새로운점수설정 Student.cpp BinaryObjectIO Run C++ 로시작하는객체지향프로그래밍 32

임의접근파일 파일은바이트의연속으로구성되어있다. 이들바이트중한곳에는파일포인터 (file pointer) 라고하는특별한표식이있는데, 읽기나쓰기동작은파일포인터의위치에서발생한다. 파일이열리면파일포인터는파일의첫위치로설정되고, 파일에서데이터를읽거나쓰기를하면파일포인터가다음데이터항목으로이동하게된다. 예를들어, get() 함수를사용하여문자를읽으면 C++ 는파일포인터로부터한바이트를읽고, 그다음, 파일포인터는 1 바이트다음위치로이동하게된다. C++ 로시작하는객체지향프로그래밍 33

임의접근파일 ( 계속 ) 파일포인터 파일 byte byte byte byte byte byte byte byte byte byte byte byte (a) get() 실행전 파일포인터 파일 byte byte byte byte byte byte byte byte byte byte byte byte (b) get() 실행후 C++ 로시작하는객체지향프로그래밍 34

seekp, seekg, tellp, tellg 탐색기준 ios::beg ios::end ios::cur 설명파일의시작위치로부터오프셋을계산파일의끝으로부터오프셋계산현재파일포인터로부터오프셋계산 문장 seekg(100l, ios::beg); 설명 파일의시작위치로부터 100 번째바이트로파일포인터를이동 seekg(-100l, ios::end); 파일의끝으로부터거꾸로 100 번째바이트로파일포인터를이동 seekp(42l, ios::cur); seekp(-42l, ios::cur); seekp(100l); 현재파일포인터로부터전방 ( 파일의끝쪽 ) 으로 42 번째바이트만큼파일포인터이동 현재파일포인터로부터후방 ( 파일의앞쪽 ) 으로 42 번째바이트만큼파일포인터이동 파일에서 100 번째바이트로파일포인트이동 C++ 로시작하는객체지향프로그래밍 35

임의접근파일예 리스트 12.17 은파일을어떻게임의적으로접근할수있는지를설명하고있다. 프로그램은먼저파일에 10 개의 student 객체를저장하고, 파일로부터 3번째학생을검색한다. RandomAccessFile Run C++ 로시작하는객체지향프로그래밍 36

파일갱신 리스트 12.18은파일을갱신하는방법에대해설명하고있다. 리스트 12.17에서 object1.dat 파일이이미 10 개의 Student 객체를가지고생성되었다고가정한다. 프로그램은먼저파일로부터 3 번째학생을읽고성 (last name) 을변경한다음, 파일의객체를수정한다. 그다음, 파일로부터새로운객체를읽는다. UpdateFile Run C++ 로시작하는객체지향프로그래밍 37