Slide 1

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

설계란 무엇인가?

설계란 무엇인가?

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - [2009] 02.pptx

C++ Programming

쉽게 풀어쓴 C 프로그래밍

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

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

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

C프로-3장c03逞풚

Microsoft PowerPoint - C++ 5 .pptx

C++ Programming

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

쉽게 풀어쓴 C 프로그래밍

슬라이드 1

Microsoft PowerPoint - chap06-2pointer.ppt

Slide 1

Slide 1

Slide 1

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

Microsoft PowerPoint - Chap12-OOP.ppt

Slide 1

Microsoft PowerPoint - Chapter 1-rev

Slide 1

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

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

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

PowerPoint Template

PowerPoint Template

설계란 무엇인가?

PowerPoint Presentation

<432B2BC7C1B7CEB1D7B7A1B9D628BABBB9AE5FC3D6C1BE295B315D2E687770>

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

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

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

Microsoft PowerPoint - chap06-1Array.ppt

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

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

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

Microsoft PowerPoint - 3ÀÏ°_º¯¼ö¿Í »ó¼ö.ppt

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

설계란 무엇인가?

쉽게 풀어쓴 C 프로그래밍

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

1. 표준입출력 C++ : C의모든라이브러리를포함 printf, scanf 함수사용가능예 : int, double, 문자열값을입력받고출력하기 #include <cstdio> int ivar; double dvar; char str[20]; printf("int, dou

Slide 1

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

PowerPoint Presentation

< E20C6DFBFFEBEEE20C0DBBCBAC0BB20C0A7C7D12043BEF0BEEE20492E707074>

Slide 1

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

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

歯9장.PDF

슬라이드 1

PowerPoint Template

C++ Programming

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

PowerPoint 프레젠테이션

설계란 무엇인가?

Slide 1

PowerPoint 프레젠테이션

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

Design Issues

080629_CFP °ø°³¿ë.hwp

Microsoft PowerPoint - Chapter 6.ppt

Programming hwp

프입2-강의노트-C++기초

2002년 2학기 자료구조

API 매뉴얼

Microsoft PowerPoint - CSharp-10-예외처리

PowerPoint 프레젠테이션

JAVA PROGRAMMING 실습 08.다형성

class Sale void makelineitem(productspecification* spec, int qty) SalesLineItem* sl = new SalesLineItem(spec, qty); ; 2. 아래의액티비티다이어그램을보고 Java 또는 C ++,

<4D F736F F F696E74202D2034C5D8BDBAC6AEC6C4C0CFC0D4C3E2B7C2312E505054>

C++ Programming

<4D F736F F F696E74202D20B8AEB4AABDBA20BFC0B7F920C3B3B8AEC7CFB1E22E BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap10-함수의활용.pptx

Chapter #01 Subject

Microsoft PowerPoint - java1-lab5-ImageProcessorTestOOP.pptx

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

OCW_C언어 기초

PowerPoint 프레젠테이션

Microsoft PowerPoint - 8ÀÏ°_Æ÷ÀÎÅÍ.ppt

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

Microsoft PowerPoint - es-arduino-lecture-03


Microsoft PowerPoint - chap06-5 [호환 모드]

API 매뉴얼

쉽게

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

제 1 장 기본 개념

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

1. 기본형의형변환복습 C/C++ 형변환의종류 자동형변환 ( 묵시적형변환 ) 강제형변환 ( 명시적형변환 ) 기본형의자동형변환의예 1. 배열 to 포인터변환 배열명은해당배열의첫번째원소의 주소로변환됨 int ary[10]; int *pary = ary; 2. 함수 to 포

2007_2_project4

Microsoft PowerPoint - Chapter 10.ppt

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

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

chap 5: Trees

Transcription:

SeoulTech 2011-2 nd 프로그래밍입문 (2) Chapter 12. Stream and File I/O 박종혁교수 (http://www.parkjonghyuk.net) Tel: 970-6702 Email: jhpark1@snut.ac.kr

Learning Objectives I/O Streams File I/O Character I/O Stream I/O 도구 입력 : 파일이름 서식출력, 플래그설정 Stream 계층 상속미리보기 파일 Random Access

개요 Streams 특수개체 프로그램입력및출력을제공 File I/O 상속을사용 File I/O 는매우유용하게사용

Streams 문자의흐름 입력스트림 프로그램흐름 키보드에서입력가능 파일에서입력가능 출력스트림 프로그램흐름 화면으로출력가능 파일로출력가능

Streams 사용 이미스트림을사용중 cin 키보드를통한스트림입력 cout 스크린을통한스트림출력 다른스트림정의 파일 cin, cout 과유사한사용

cin, cout 과유사한 stream 사용 고려 : 주어진프로그램이일부파일에서 instream 정의 : int thenumber; instream >> thenumber; thenumber 에할당된스트림에서값을읽음 프로그램에서정의한 outstream 으로파일에쓰기 outstream << "thenumber is " << thenumber; Stream 에저장된값을파일에쓰기

Files 텍스트파일사용 파일에서읽기 프로그램이입력을받을경우 파일에쓰기 프로그램이출력을내보낼경우 파일의처음부터시작해서끝까지 사용가능한다른방법 여기서는간단한텍스트파일액세스를다룸

File Connection 첫째로스트림객체와파일을연결 For input: File ifstream object For output: File ofstream object Classes ifstream and ofstream 라이브러리로정의된 <fstream> Std namespace

File I/O Libraries 프로그램의파일입출력을모두허용하려면 : #include <fstream> using namespace std; OR #include <fstream> using std::ifstream; using std::ofstream;

Streams 선언 스트림은다른클래스변수처럼선언 : ifstream instream; ofstream outstream; 파일과연결 : instream.open("infile.txt"); "opening the file open 멤버함수사용 전체경로명지정가능

Streams 사용 한번선언 일반적으로사용! int onenumber, anothernumber; instream >> onenumber >> anothernumber; 유사한출력스트림 : ofstream outstream; outstream.open("outfile.txt"); outstream 출력파일에항목을보냄 << "onenumber = " << onenumber << " anothernumber = " << anothernumber;

File Names 프로그램및파일 프로그램에서두개의파일이름을갖음 외부파일이름 물리적파일이름 Ex)"infile.txt" 때로는실제파일이름으로간주 열기위해프로그램에서한번사용 스트림이름 논리적파일이름 프로그램은모든파일작업에대해이이름을사용

Closing Files 다사용한파일은닫아야함 프로그램에서입력과출력이완료되면파일에서스트림연결을끊음 In action: instream.close(); outstream.close(); 프로그램이끝날때파일이자동으로종료

File Flush 출력은종종버퍼를사용 파일에기록하기전에일시적으로저장 필요에의해강제적으로쓰기가능 : outstream.flush(); flush 멤버함수는모든스트림출력에사용 모든버퍼출력은물리적으로작성 파일을닫으면자동으로 flush() 호출

File Example: Display 12.1 Simple File Input/Output (1 of 2)

File Example: Display 12.1 Simple File Input/Output (1 of 2)

Appending to a File 표준 open 은빈파일에서시작 파일이존재 내용분실 추가를위한 open: ofstream outstream; outstream.open("important.txt", ios::app); 파일이없음 파일생성 파일이존재 파일의끝에추가 2 번째인자인 ios 는 <iostream> 라이브러리에서지정

File Opens 을위한대체구문 선언에서파일이름을지정가능 생성자에인수로전달 ifstream instream; instream.open("infile.txt"); EQUIVALENT TO: ifstream instream("infile.txt");

Checking File Open Success 파일오픈은실패할수있음 파일이존재하지않는경우 파일에대한쓰기권한이없는경우 Unexpected results 멤버함수 fail() instream.open("stuff.txt"); if (instream.fail()) { cout << "File open failed.\n"; exit(1); }

문자 I/O with Files 모든 cin 과 cout 문자 I/O 는파일과같음 멤버함수 : get, getline put, putback, peek, ignore

Checking End of File 파일의끝까지 loop 전형적인방법 파일의끝을검사하는두가지방법 eof() 멤버함수 instream.get(next); while (!instream.eof()) { cout << next; instream.get(next); } 파일이끝날때까지문자를읽음 eof() 멤버함수는 BOOL 반환

End of File Check with Read 두번째방법 읽기작업에서 BOOL 값반환! (instream >> next) 성공적으로읽으면 true 반환 파일의끝을지나읽기를시도하면 false 반환 In action: double next, sum = 0; while (instream >> next) sum = sum + next; cout << "the sum is " << sum << endl;

Tools: 파일이름입력받기 스트림오픈작업 open() 에사용할 string 변수지정 char filename[16]; ifstream instream; cout << "Enter file name: "; cin >> filename; instream.open(filename); 더많은유연성제공

Formatting Output with Stream Functions 1 장의 "magic formula": cout.setf(ios::fixed); cout.setf(ios::showpoint); cout.precision(2); 모든출력스트림에사용가능 파일스트림은 cout 객체와동일한멤버함수를갖음

Output Member Functions 고려 : outstream.setf(ios::fixed); outstream.setf(ios::showpoint); outstream.precision(2); precision(x) 멤버함수 소수점뒤에 "x" 자리로작성된십진수 setf() 멤버함수 출력플래그의다양한설정허용

More Output Member Functions 고려 : outstream.width(5); width(x) 멤버함수 출력할너비를 "x 값으로지정 다음출력될값에만영향

Flags setf() 멤버함수 출력플래그의상태설정 모든출력스트림은 setf() 를멤버로갖음 플래그는 <iostream> 라이브러리에저장

setf() Examples 일반적인사용 : outstream.setf(ios::fixed); 십진수고정소수정 outstream.setf(ios::showpoint) 항상소수점포함 outstream.setf(ios::right); 오른쪽기준출력 프래그의다중사용 : outstream.setf(ios::fixed ios::showpoint ios::right);

조작자 조작자정의 : 기존과는다른새로운차원의방법으로호출하는함수 " 인자를가질수도가지지않을수도있음 삽입연산자다음에위치 멤버함수와동일한기능수행! 일반적으로조작자는멤버함수와같이사용 setw(), setprecision()

조작자 Example: setw() setw() 조작자 : cout << "Start" << setw(4) << 10 << setw(4) << 20 << setw(6) << 30; 결과 : Start 10 20 30 setw() 는오직다음에만영향

조작자 setprecision() setprecision() 조작자 : cout.setf(ios::fixed ios::showpoint); cout << "$" << setprecision(2) << 10.3 << " " << "$" << 20.5 << endl; 결과 : $10.30 $20.50

플래그값저장 플래그설정을변경할때까지유지 Precision, setf 프래그는현재설정을저장하거나원래설정으로복원가능 precision() 함수는인수없이호출되면현재설정반환 flags() 멤버함수도유사한기능제공

플래그값저장 Example void outputstuff(ofstream& outstream) { int precisionsetting = outstream.precision(); long flagsettings = outstream.flags(); outstream.setf(ios::fixed ios::showpoint); outstream.precision(2); outstream.precision(precisionsetting); outstream.flags(flagsettings); }

setf 기본값복원설정 기본값으로복원설정가능 : cout.setf(0, ios::floatfield); 디폴트값은플래그값이변경되기직전의설정값을의미하지않음 디폴트값은컴파일러구성에따라다름 precision 설정값을복원시키지않음 Only setf settings

계층적 Stream 구조 클래스에서의상속 파생클래스 다른클래스에서얻은하나의클래스 추가적인기능보유 Example: 입력파일스트림클래스는모든입력스트림클래스에서파생 Open, close 멤버함수추가 i.e.: ifstream is derived from istream

상속의실제예 컨버터블은자동차에서파생 모든컨버터블은자동차이다. 컨버터블은일반자동차와는다른특성을지닌다.

스트림클래스상속 클래스 D 가클래스 B 로부터파생 D 형의모든객체는 B 형객체 스트림 : ifstream 객체는 istream 객체 istream 을매개변수로사용 더많은객체에연결가능!

스트림클래스상속 Example

스트림클래스상속 Example Calls 이전기능을고려 : twosumversion1(filein); // Legal! twosumversion1(cin); // ILLEGAL! cin 는 ifstream형이아님! twosumversion2(filein); // Legal! twosumversion2(cin); // Legal! istream 인자는둘다사용가능

파일임의접근 순차접근 일반적인사용 임의접근 빠른접근 특별한데이터베이스소프트웨어에사용 파일임의의부분에접근 fstream 객체사용 input and output

임의접근 Tools Istream, ostream 과동일 두번째인자필요 fstream rwstream; rwstream.open("stuff", ios::in ios:: out); 두번째인자값은입력, 출력, 입출력모드인지여부알림 파일에대한이동 rwstream.seekp(1000); 파일의 1000 번째바이트위치 rwstream.seekg(1000); 1000 번째위치의포인터값

Random Access Sizes 파일에대한이동 사이즈를알아야함 sizeof() 연산은개체의바이트수결정 : sizeof(s) //Where s is string s = "Hello" sizeof(10) sizeof(double) sizeof(myobject) 100 번째의 MyStruct 형의레코드부분의포이터값 : rwstream.seekp(100*sizeof(mystruct) 1);

요약 1 open 연산으로스트림과파일을연결 fail() 멤버함수로파일 open 성공유무확인 스트림멤부함수포맷출력 e.g., width, setf, precision cout (screen), files 동일 함수는스트림형의매개변수보유가능 반드시 call-by-reference

요약 2 istream ("f 철자없음 ) cin, ifstream 매개변수사용가능 ostream ("f 철자없음 ) cout,ofstream 매개변수사용가능 Eof 멤버함수 입력파일의끝을검사하는데사용

Q&A 4-45