๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“ Development Study/๐Ÿ‘จ๐Ÿพ‍๐Ÿ’ป C++

ํŒŒ์ผ ์ž…์ถœ๋ ฅ

by eazuooz 2022. 8. 22.

C++๋Š” ํŒŒ์ผ๋กœ/์—์„œ ๋ฌธ์ž์˜ ์ถœ๋ ฅ ๋ฐ ์ž…๋ ฅ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ํด๋ž˜์Šค๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ofstream: ํŒŒ์ผ์— ์“ธ ์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค
  • ifstream: ํŒŒ์ผ์—์„œ ์ฝ์„ ์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค
  • fstream: ํŒŒ์ผ์„ ์ฝ๊ณ  ์“ธ ์ˆ˜ ์žˆ๋Š” ์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.
  • istream์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋Š” ํด๋ž˜์Šค ๋ฐ ์—์„œ ์ง์ ‘ ๋˜๋Š” ๊ฐ„์ ‘์ ์œผ๋กœ ํŒŒ์ƒ๋ฉ๋‹ˆ๋‹ค ostream. ์œ ํ˜•์ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ์ด๋ฏธ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค. cin๋Š” class ์˜ ๊ฐ์ฒด istream์ด๊ณ  cout๋Š” class ์˜ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค ostream. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ํŒŒ์ผ ์ŠคํŠธ๋ฆผ๊ณผ ๊ด€๋ จ๋œ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‚ฌ์‹ค, ์šฐ๋ฆฌ๋Š” ์šฐ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ๋‹จ, ์ด๋Ÿฌํ•œ ์ŠคํŠธ๋ฆผ์„ ์‹ค์ œ ํŒŒ์ผ cin๊ณผ cout์—ฐ๊ฒฐํ•ด์•ผ ํ•œ๋‹ค๋Š” ์œ ์ผํ•œ ์ฐจ์ด์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.
// basic file operations
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ofstream myfile;
  myfile.open ("example.txt");
  myfile << "Writing this to a file.\n";
  myfile.close();
  return 0;
}

์ด ์ฝ”๋“œ๋Š” ๋ผ๋Š” ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  example.txt์šฐ๋ฆฌ๊ฐ€ ํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ๋ฌธ์žฅ์„ ์‚ฝ์ž… coutํ•˜์ง€๋งŒ ๋Œ€์‹  ํŒŒ์ผ ์ŠคํŠธ๋ฆผ myfile์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ๋‹จ๊ณ„๋ณ„๋กœ ์ง„ํ–‰ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์—ด๊ธฐ

์ด๋Ÿฌํ•œ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์˜ ๊ฐœ์ฒด์— ๋Œ€ํ•ด ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์€ ๊ฐœ์ฒด๋ฅผ ์‹ค์ œ ํŒŒ์ผ์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ ˆ์ฐจ๋Š” ํŒŒ์ผ์„ ์—ฌ๋Š” ๊ฒƒ์œผ๋กœ ์•Œ๋ ค์ ธ ์žˆ์Šต๋‹ˆ๋‹ค . ์—ด๋ฆฐ ํŒŒ์ผ์€ ํ”„๋กœ๊ทธ๋žจ ๋‚ด์—์„œ ์ŠคํŠธ๋ฆผ (์ฆ‰, ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜์˜ ๊ฐ์ฒด, ์ด์ „ ์˜ˆ์—์„œ๋Š” this myfile)์œผ๋กœ ํ‘œ์‹œ๋˜๋ฉฐ ์ด ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด์—์„œ ์ˆ˜ํ–‰๋œ ๋ชจ๋“  ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ์—ฐ๊ฒฐ๋œ ์‹ค์ œ ํŒŒ์ผ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ.

 

์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ์„ ์—ด๊ธฐ ์œ„ํ•ด ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค open. Where ๋Š” ์—ด๋ ค๋Š” ํŒŒ์ผ์˜ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์ด๊ณ  ๋Š” ๋‹ค์Œ ํ”Œ๋ž˜๊ทธ์˜ ์กฐํ•ฉ์ด ์žˆ๋Š” ์„ ํƒ์  ๋งค๊ฐœ๋ณ€์ˆ˜์ž…๋‹ˆ๋‹ค.

open (filename, mode);

filenamemode

ios::in ์ž…๋ ฅ ์ž‘์—…์„ ์œ„ํ•ด ์—ฝ๋‹ˆ๋‹ค.
ios::out ์ถœ๋ ฅ ์ž‘์—…์„ ์œ„ํ•ด ์—ฝ๋‹ˆ๋‹ค.
ios::binary ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ์—์„œ ์—ฝ๋‹ˆ๋‹ค.
ios::ate ํŒŒ์ผ ๋์—์„œ ์ดˆ๊ธฐ ์œ„์น˜๋ฅผ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.
์ด ํ”Œ๋ž˜๊ทธ๊ฐ€ ์„ค์ •๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์ดˆ๊ธฐ ์œ„์น˜๋Š” ํŒŒ์ผ์˜ ์‹œ์ž‘์ž…๋‹ˆ๋‹ค.
ios::app ๋ชจ๋“  ์ถœ๋ ฅ ์ž‘์—…์€ ํŒŒ์ผ ๋์—์„œ ์ˆ˜ํ–‰๋˜์–ด ํŒŒ์ผ์˜ ํ˜„์žฌ ๋‚ด์šฉ์— ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
ios::trunc ์ถœ๋ ฅ ์ž‘์—…์„ ์œ„ํ•ด ํŒŒ์ผ์ด ์—ด๋ฆฌ๊ณ  ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒฝ์šฐ ์ด์ „ ๋‚ด์šฉ์ด ์‚ญ์ œ๋˜๊ณ  ์ƒˆ ๋‚ด์šฉ์œผ๋กœ ๋ฐ”๋€๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ๋ชจ๋“  ํ”Œ๋ž˜๊ทธ๋Š” ๋น„ํŠธ ์—ฐ์‚ฐ์ž OR( |)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐํ•ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, example.bin๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ์—์„œ ํŒŒ์ผ์„ ์—ด๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค open.

ofstream myfile;
myfile.open ("example.bin", ios::out | ios::app | ios::binary);

ํด๋ž˜์Šค ์˜ ๊ฐ open๋ฉค๋ฒ„ ํ•จ์ˆ˜ ์—๋Š” ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜ ์—†์ด ํŒŒ์ผ์„ ์—ด ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋ณธ ๋ชจ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค .ofstreamifstreamfstream

 

 

class default mode parameter
ofstream ios::out
ifstream ios::in
fstream ios::in | ios::out

For ifstream๋ฐ ofstreamํด๋ž˜์Šค ๋Š” ํฌํ•จํ•˜์ง€ ์•Š๋Š” ๋ชจ๋“œ๊ฐ€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜์— ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ๋˜๋”๋ผ๋„ (ํ”Œ๋ž˜๊ทธ๊ฐ€ ๊ฒฐํ•ฉ๋จ) ์ž๋™ ios::in์œผ๋กœ ๊ฐ๊ฐ ๊ฐ€์ •๋ฉ๋‹ˆ๋‹ค. ์˜ ๊ฒฝ์šฐ ๋ชจ๋“œ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š๊ณ  ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ๊ฒฝ์šฐ์—๋งŒ ๊ธฐ๋ณธ๊ฐ’์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. ํ•จ์ˆ˜๊ฐ€ ํ•ด๋‹น ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ ํ˜ธ์ถœ๋˜๋ฉด ๊ธฐ๋ณธ ๋ชจ๋“œ๊ฐ€ ๊ฒฐํ•ฉ๋˜์ง€ ์•Š๊ณ  ์žฌ์ •์˜๋ฉ๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ชจ๋“œ ์—์„œ ์—ด๋ฆฐ ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์€ ํ˜•์‹ ๊ณ ๋ ค ์‚ฌํ•ญ๊ณผ ๊ด€๊ณ„์—†์ด ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋ฐ”์ด๋„ˆ๋ฆฌ๊ฐ€ ์•„๋‹Œ ํŒŒ์ผ์„ ํ…์ŠคํŠธ ํŒŒ์ผ ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.ios::outopen

fstream

, ์ผ๋ถ€ ํŠน์ˆ˜ ๋ฌธ์ž(์˜ˆ: ๊ฐœํ–‰ ๋ฌธ์ž ๋ฐ ์บ๋ฆฌ์ง€ ๋ฆฌํ„ด ๋ฌธ์ž)์˜ ํ˜•์‹์œผ๋กœ ์ธํ•ด ์ผ๋ถ€ ๋ฒˆ์—ญ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ฒซ ๋ฒˆ์งธ ์ž‘์—…์€ ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ผ์„ ์—ฌ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ด ์„ธ ํด๋ž˜์Šค์—๋Š” ์ž๋™์œผ๋กœ open๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๊ณ  ์ด ๋ฉค๋ฒ„์™€ ์ •ํ™•ํžˆ ๋™์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ–๋Š” ์ƒ์„ฑ์ž๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. myfile๋”ฐ๋ผ์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜์—ฌ ์ด์ „ ๊ฐœ์ฒด๋ฅผ ์„ ์–ธํ•˜๊ณ  ์ด์ „ ์˜ˆ์ œ์—์„œ ๋™์ผํ•œ ์—ด๊ธฐ ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค .

ofstream myfile ("example.bin", ios::out | ios::app | ios::binary);

๋‹จ์ผ ๋ช…๋ น๋ฌธ์—์„œ ๊ฐœ์ฒด ๊ตฌ์„ฑ๊ณผ ์ŠคํŠธ๋ฆผ ์—ด๊ธฐ๋ฅผ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค. ํŒŒ์ผ์„ ์—ฌ๋Š” ๋‘ ๊ฐ€์ง€ ํ˜•์‹์€ ๋ชจ๋‘ ์œ ํšจํ•˜๋ฉฐ ๋™๋“ฑํ•ฉ๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์ด ์„ฑ๊ณต์ ์œผ๋กœ ํŒŒ์ผ์„ ์—ฌ๋Š”์ง€ ํ™•์ธํ•˜๋ ค๋ฉด member ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค is_open. ์ด ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ์‹ค์ œ๋กœ ์ŠคํŠธ๋ฆผ ๊ฐœ์ฒด๊ฐ€ ์—ด๋ฆฐ ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ฑฐ๋‚˜ ๊ทธ๋ ‡์ง€ ์•Š์€ ๊ฒฝ์šฐ bool๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.truefalse

if (myfile.is_open()) { /* ok, proceed with output */ }

 

ํŒŒ์ผ ๋‹ซ๊ธฐ

ํŒŒ์ผ์— ๋Œ€ํ•œ ์ž…๋ ฅ ๋ฐ ์ถœ๋ ฅ ์ž‘์—…์ด ๋๋‚˜๋ฉด ์šด์˜ ์ฒด์ œ์— ์•Œ๋ฆฌ๊ณ  ํ•ด๋‹น ๋ฆฌ์†Œ์Šค๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํŒŒ์ผ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ์œ„ํ•ด ์ŠคํŠธ๋ฆผ์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค close. ์ด ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ์—ฐ๊ฒฐ๋œ ๋ฒ„ํผ๋ฅผ ํ”Œ๋Ÿฌ์‹œํ•˜๊ณ  ํŒŒ์ผ์„ ๋‹ซ์Šต๋‹ˆ๋‹ค.

myfile.close();

์ด ๋ฉค๋ฒ„ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋ฉด ์ŠคํŠธ๋ฆผ ๊ฐœ์ฒด๋ฅผ ๋‹ค์‹œ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํŒŒ์ผ์„ ์—ด ์ˆ˜ ์žˆ์œผ๋ฉฐ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์—์„œ ํŒŒ์ผ์„ ๋‹ค์‹œ ์—ด ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์—ด๋ฆฐ ํŒŒ์ผ๊ณผ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ์—์„œ ๊ฐ์ฒด๊ฐ€ ์†Œ๋ฉธ๋˜๋Š” ๊ฒฝ์šฐ ์†Œ๋ฉธ์ž๋Š” ์ž๋™์œผ๋กœ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ฉ๋‹ˆ๋‹ค close.

 

ํ…์ŠคํŠธ ํŒŒ์ผ

ํ…์ŠคํŠธ ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์€ ios::binary์—ด๊ธฐ ๋ชจ๋“œ์— ํ”Œ๋ž˜๊ทธ๊ฐ€ ํฌํ•จ๋˜์ง€ ์•Š์€ ์ŠคํŠธ๋ฆผ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํŒŒ์ผ์€ ํ…์ŠคํŠธ๋ฅผ ์ €์žฅํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฏ€๋กœ ์ž…๋ ฅ ๋˜๋Š” ์ถœ๋ ฅ๋˜๋Š” ๋ชจ๋“  ๊ฐ’์€ ๋ฆฌํ„ฐ๋Ÿด ์ด์ง„ ๊ฐ’๊ณผ ๋ฐ˜๋“œ์‹œ โ€‹โ€‹์ผ์น˜ํ•˜์ง€ ์•Š๋Š” ์ผ๋ถ€ ํ˜•์‹ ๋ณ€ํ™˜์„ ๊ฒช์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ํŒŒ์ผ์— ๋Œ€ํ•œ ์“ฐ๊ธฐ ์ž‘์—…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค cout.

// writing on a text file
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  ofstream myfile ("example.txt");
  if (myfile.is_open())
  {
    myfile << "This is a line.\n";
    myfile << "This is another line.\n";
    myfile.close();
  }
  else cout << "Unable to open file";
  return 0;
}

ํŒŒ์ผ์—์„œ ์ฝ๊ธฐ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ˆ˜ํ–‰ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค cin.

// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
  string line;
  ifstream myfile ("example.txt");
  if (myfile.is_open())
  {
    while ( getline (myfile,line) )
    {
      cout << line << '\n';
    }
    myfile.close();
  }

  else cout << "Unable to open file"; 

  return 0;
}

์ด ๋งˆ์ง€๋ง‰ ์˜ˆ์ œ๋Š” ํ…์ŠคํŠธ ํŒŒ์ผ์„ ์ฝ๊ณ  ๊ทธ ๋‚ด์šฉ์„ ํ™”๋ฉด์— ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ์„ ํ•œ ์ค„์”ฉ ์ฝ๋Š” while ๋ฃจํ”„๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.๋„์ฐฉ. ์— ์˜ํ•ด ๋ฐ˜ํ™˜๋œ ๊ฐ’๋„์ฐฉ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด ์ž์ฒด์— ๋Œ€ํ•œ ์ฐธ์กฐ์ด๋ฉฐ, ๋ถ€์šธ ํ‘œํ˜„์‹(์ด while ๋ฃจํ”„์—์„œ์™€ ๊ฐ™์ด)์œผ๋กœ ํ‰๊ฐ€๋  ๋•Œ true์ŠคํŠธ๋ฆผ์ด ๋” ๋งŽ์€ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ค€๋น„๊ฐ€ ๋˜์–ด false์žˆ๊ณ  ํŒŒ์ผ ๋์— ๋„๋‹ฌํ–ˆ๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ƒํƒœ ํ”Œ๋ž˜๊ทธ ํ™•์ธ

๋‹ค์Œ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋Š” ์ŠคํŠธ๋ฆผ์˜ ํŠน์ • ์ƒํƒœ๋ฅผ ํ™•์ธํ•˜๊ธฐ ์œ„ํ•ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค(๋ชจ๋‘ bool๊ฐ’์„ ๋ฐ˜ํ™˜ํ•จ).

bad()true์ฝ๊ธฐ ๋˜๋Š” ์“ฐ๊ธฐ ์ž‘์—…์ด ์‹คํŒจํ•˜๋ฉด ๋ฐ˜ํ™˜ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์“ฐ๊ธฐ ์œ„ํ•ด ์—ด๋ ค ์žˆ์ง€ ์•Š์€ ํŒŒ์ผ์— ์“ฐ๋ ค๊ณ  ํ•˜๊ฑฐ๋‚˜ ์“ฐ๋ ค๊ณ  ํ•˜๋Š” ์žฅ์น˜์— ๊ณต๊ฐ„์ด ๋‚จ์•„ ์žˆ์ง€ ์•Š์€ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค.fail()true์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์— ๋ฐ˜ํ™˜ bad()ํ•˜์ง€๋งŒ ์ •์ˆ˜๋ฅผ ์ฝ์œผ๋ ค๊ณ  ํ•  ๋•Œ ์•ŒํŒŒ๋ฒณ ๋ฌธ์ž๊ฐ€ ์ถ”์ถœ๋˜๋Š” ๊ฒฝ์šฐ์™€ ๊ฐ™์ด ํ˜•์‹ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.eof()true์ฝ๊ธฐ ์œ„ํ•ด ์—ด๋ ค ์žˆ๋Š” ํŒŒ์ผ์ด ๋์— ๋„๋‹ฌํ•˜๋ฉด ๋ฐ˜ํ™˜ ํ•ฉ๋‹ˆ๋‹ค.good()๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ์ƒํƒœ ํ”Œ๋ž˜๊ทธ false์ž…๋‹ˆ๋‹ค. ์ด์ „ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋ฐ˜ํ™˜๋˜๋Š” ๊ฒƒ๊ณผ ๋™์ผํ•œ ๊ฒฝ์šฐ์— ๋ฐ˜ํ™˜ true๋ฉ๋‹ˆ๋‹ค. goodand ๋Š” bad์ •ํ™•ํžˆ ๋ฐ˜๋Œ€๊ฐ€ ์•„๋‹™๋‹ˆ๋‹ค( good๋” ๋งŽ์€ ์ƒํƒœ ํ”Œ๋ž˜๊ทธ๋ฅผ ํ•œ ๋ฒˆ์— ํ™•์ธ).
๋ฉค๋ฒ„ ํ•จ์ˆ˜ clear()๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ํ”Œ๋ž˜๊ทธ๋ฅผ ์žฌ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

์ŠคํŠธ๋ฆผ ์œ„์น˜ ๊ฐ€์ ธ์˜ค๊ธฐ ๋ฐ ๋„ฃ๊ธฐ

๋ชจ๋“  i/o ์ŠคํŠธ๋ฆผ ๊ฐ์ฒด๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ -์ตœ์†Œํ•œ ํ•˜๋‚˜์˜ ๋‚ด๋ถ€ ์œ„์น˜๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค:

ifstream์™€ ๊ฐ™์ด ๋‹ค์Œ ์ž…๋ ฅ ์ž‘์—…์—์„œ ์ฝ์„ ์š”์†Œ์˜ ์œ„์น˜์™€ ํ•จ๊ป˜ istream๋‚ด๋ถ€ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„์น˜ ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

ofstream์™€ ๊ฐ™์ด ๋‹ค์Œ ์š”์†Œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•˜๋Š” ์œ„์น˜์™€ ํ•จ๊ป˜ ostream๋‚ด๋ถ€ ํ’‹ ์œ„์น˜ ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ , ๋Š” get ๋ฐ put ์œ„์น˜fstream ๋ฅผ ๋ชจ๋‘ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค (์˜ˆ: ) . ์ด๋Ÿฌํ•œ ๋‚ด๋ถ€ ์ŠคํŠธ๋ฆผ ์œ„์น˜๋Š” ๋‹ค์Œ ์ฝ๊ธฐ ๋˜๋Š” ์“ฐ๊ธฐ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜๋Š” ์ŠคํŠธ๋ฆผ ๋‚ด์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ„์น˜๋Š” ๋‹ค์Œ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ด€์ฐฐํ•˜๊ณ  ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.iostream



Tellg() ๋ฐ Tellp()

๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ์ด ๋‘ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ ๋Š” ํ˜„์žฌ ๊ฐ€์ ธ์˜ค๊ธฐ ์œ„์น˜ ( ์˜ ๊ฒฝ์šฐ ) ๋˜๋Š” ๋„ฃ๊ธฐ ์œ„์น˜ ( ์˜ ๊ฒฝ์šฐ) streampos๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์œ ํ˜•์ธ ๋ฉค๋ฒ„ ์œ ํ˜•์˜ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค .tellgtellp

Seekg() ๋ฐ seekp()

์ด ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด get ๋ฐ put ์œ„์น˜ ์˜ ์œ„์น˜๋ฅผ โ€‹โ€‹๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค . ๋‘ ํ•จ์ˆ˜ ๋ชจ๋‘ ๋‘ ๊ฐœ์˜ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ ์˜ค๋ฒ„๋กœ๋“œ๋ฉ๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœํ† ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ์ŠคํŠธ๋ฆผ ํฌ์ธํ„ฐ๊ฐ€ ์ ˆ๋Œ€ ์œ„์น˜๋กœ ๋ณ€๊ฒฝ๋ฉ๋‹ˆ๋‹ค (ํŒŒ์ผ ์‹œ์ž‘ ๋ถ€๋ถ„๋ถ€ํ„ฐ ๊ณ„์‚ฐ). ์ด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ์œ ํ˜•์€ ์ด๋ฉฐ , ์ด๋Š” ํ•จ์ˆ˜ ๋ฐ ์—์„œ ๋ฐ˜ํ™˜๋œ ๊ฒƒ๊ณผ ๋™์ผํ•œ ์œ ํ˜• ์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜์˜ ๋‹ค๋ฅธ ํ˜•์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ํ”„๋กœํ† ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ€์ ธ์˜ค๊ธฐ ๋˜๋Š” ๋„ฃ๊ธฐ ์œ„์น˜ ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ์˜ํ•ด ๊ฒฐ์ •๋œ ํŠน์ • ์ง€์ ์— ์ƒ๋Œ€์ ์ธ ์˜คํ”„์…‹ ๊ฐ’์œผ๋กœ ์„ค์ •๋ฉ๋‹ˆ๋‹ค . ์œ ํ˜• ์ž…๋‹ˆ๋‹ค. ๋Š” ์œ ํ˜• ์ž…๋‹ˆ๋‹ค .

seekg ( position );
seekp ( position );

positionstreampostellgtellp



seekg ( offset, direction );
seekp ( offset, direction );

directionoffsetstreamoffdirectionseekdir์˜คํ”„์…‹์ด ๊ณ„์‚ฐ๋˜๋Š” ์ง€์ ์„ ๊ฒฐ์ •ํ•˜๋Š” ์—ด๊ฑฐํ˜• ์œ ํ˜• ์œผ๋กœ, ๋‹ค์Œ ๊ฐ’ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ios::beg ์ŠคํŠธ๋ฆผ์˜ ์‹œ์ž‘๋ถ€ํ„ฐ ๊ณ„์‚ฐ๋œ ์˜คํ”„์…‹
ios::cur ํ˜„์žฌ ์œ„์น˜์—์„œ ๊ณ„์‚ฐ๋œ ์˜คํ”„์…‹
ios::end ์ŠคํŠธ๋ฆผ ๋์—์„œ ๊ณ„์‚ฐ๋œ ์˜คํ”„์…‹


๋‹ค์Œ ์˜ˆ์ œ๋Š” ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด ๋ฐฉ๊ธˆ ๋ณธ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

// obtaining file size
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  streampos begin,end;
  ifstream myfile ("example.bin", ios::binary);
  begin = myfile.tellg();
  myfile.seekg (0, ios::end);
  end = myfile.tellg();
  myfile.close();
  cout << "size is: " << (end-begin) << " bytes.\n";
  return 0;
}

๋ณ€์ˆ˜์— ์‚ฌ์šฉํ•œ ์œ ํ˜• begin๊ณผ end๋‹ค์Œ ์„ ํ™•์ธํ•˜์‹ญ์‹œ์˜ค.

 

streampos size;

streampos๋ฒ„ํผ ๋ฐ ํŒŒ์ผ ์œ„์น˜ ์ง€์ •์— ์‚ฌ์šฉ๋˜๋Š” ํŠน์ • ์œ ํ˜•์ด๋ฉฐ ์—์„œ ๋ฐ˜ํ™˜๋˜๋Š” ์œ ํ˜• file.tellg()์ž…๋‹ˆ๋‹ค. ์ด ์œ ํ˜•์˜ ๊ฐ’์€ ๋™์ผํ•œ ์œ ํ˜•์˜ ๋‹ค๋ฅธ ๊ฐ’์—์„œ ์•ˆ์ „ํ•˜๊ฒŒ ๋บ„ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ํฌํ•จํ•  ๋งŒํผ ์ถฉ๋ถ„ํžˆ ํฐ ์ •์ˆ˜ ์œ ํ˜•์œผ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿฌํ•œ ์ŠคํŠธ๋ฆผ ์œ„์น˜ ์ง€์ • ๊ธฐ๋Šฅ์€ ๋‘ ๊ฐ€์ง€ ํŠน์ • ์œ ํ˜•์ธ streampos๋ฐ ๋ฅผ ์‚ฌ์šฉ streamoffํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์œ ํ˜•์€ ์ŠคํŠธ๋ฆผ ํด๋ž˜์Šค์˜ ๋ฉค๋ฒ„ ์œ ํ˜•์œผ๋กœ๋„ ์ •์˜๋ฉ๋‹ˆ๋‹ค.

 

 

์œ ํ˜• ํšŒ์› ์œ ํ˜• ์„ค๋ช…
streampos ios::pos_type ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค fpos<mbstate_t>.
๋ณ€ํ™˜ํ•  streamoff์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด๋Ÿฌํ•œ ์œ ํ˜•์˜ ๊ฐ’์„ ๋”ํ•˜๊ฑฐ๋‚˜ ๋บ„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
streamoff ios::off_type int๊ธฐ๋ณธ ์ •์ˆ˜ ์œ ํ˜•( ๋˜๋Š” ์™€ ๊ฐ™์€) ์ค‘ ํ•˜๋‚˜์˜ ๋ณ„์นญ์ž…๋‹ˆ๋‹ค long long.

์œ„์˜ ๊ฐ ๋ฉค๋ฒ„ ์œ ํ˜•์€ ํ•ด๋‹นํ•˜๋Š” ๋น„๋ฉค๋ฒ„์˜ ๋ณ„์นญ์ž…๋‹ˆ๋‹ค(์™„์ „ํžˆ ๋™์ผํ•œ ์œ ํ˜•์ž„). ์–ด๋А ๊ฒƒ์ด ์‚ฌ์šฉ๋˜๋Š”์ง€๋Š” ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฉค๋ฒ„ ์œ ํ˜•์€ ๋ชจ๋“  ์ŠคํŠธ๋ฆผ ๊ฐœ์ฒด์—์„œ ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋” ์ผ๋ฐ˜์ ์ด์ง€๋งŒ(ํŠน์ดํ•œ ์œ ํ˜•์˜ ๋ฌธ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ŠคํŠธ๋ฆผ์—์„œ๋„) ๋น„๋ฉค๋ฒ„ ์œ ํ˜•์€ ์—ญ์‚ฌ์  ์ด์œ ๋กœ ๊ธฐ์กด ์ฝ”๋“œ์—์„œ ๋„๋ฆฌ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

 

๋ฐ”์ด๋„ˆ๋ฆฌ ํŒŒ์ผ

<<์ด์ง„ ํŒŒ์ผ์˜ ๊ฒฝ์šฐ ์ถ”์ถœ ๋ฐ ์‚ฝ์ž… ์—ฐ์‚ฐ์ž( ๋ฐ >>)์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ฝ๊ณ  ์“ฐ๋Š” getline๊ฒƒ์€ ํšจ์œจ์ ์ด์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ฐ์ดํ„ฐ ํ˜•์‹์„ ์ง€์ •ํ•  ํ•„์š”๊ฐ€ ์—†๊ณ  ๋ฐ์ดํ„ฐ๊ฐ€ ์ค„ ํ˜•์‹์ด ์•„๋‹ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์—๋Š” ์ด์ง„ ๋ฐ์ดํ„ฐ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ๊ณ  ์“ฐ๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ๋‘ ๊ฐ€์ง€ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ write๋ฐ read. ์ฒซ ๋ฒˆ์งธ( )๋Š” (์— ์˜ํ•ด ์ƒ์†๋œ ) write๋ฉค๋ฒ„ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค . ๊ทธ๋ฆฌ๊ณ  (์— ์˜ํ•ด ์ƒ์†๋จ ) ์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค . ํด๋ž˜์Šค์˜ ๊ฐ์ฒด ์—๋Š” ๋‘˜ ๋‹ค ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœํ† ํƒ€์ž…์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. write ( memory_block, size ); ์ฝ๊ธฐ ( memory_block, ํฌ๊ธฐ ); Where ์œ ํ˜• (ํฌ์ธํ„ฐostreamofstreamreadistreamifstreamfstream

 

memory_blockchar*char), ์ฝ๊ธฐ ๋ฐ์ดํ„ฐ ์š”์†Œ๊ฐ€ ์ €์žฅ๋˜๊ฑฐ๋‚˜ ๊ธฐ๋ก๋  ๋ฐ์ดํ„ฐ ์š”์†Œ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐ”์ดํŠธ ๋ฐฐ์—ด์˜ ์ฃผ์†Œ๋ฅผ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ๋Š” size๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์—์„œ ์ฝ๊ฑฐ๋‚˜ ์“ธ ๋ฌธ์ž ์ˆ˜๋ฅผ ์ง€์ •ํ•˜๋Š” ์ •์ˆ˜ ๊ฐ’์ž…๋‹ˆ๋‹ค.

// reading an entire binary file
#include <iostream>
#include <fstream>
using namespace std;

int main () {
  streampos size;
  char * memblock;

  ifstream file ("example.bin", ios::in|ios::binary|ios::ate);
  if (file.is_open())
  {
    size = file.tellg();
    memblock = new char [size];
    file.seekg (0, ios::beg);
    file.read (memblock, size);
    file.close();

    cout << "the entire file content is in memory";

    delete[] memblock;
  }
  else cout << "Unable to open file";
  return 0;
}

์ด ์˜ˆ์—์„œ ์ „์ฒด ํŒŒ์ผ์„ ์ฝ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์ด ์–ด๋–ป๊ฒŒ ์ˆ˜ํ–‰๋˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

๋จผ์ € ํŒŒ์ผ์ด ios::ateํ”Œ๋ž˜๊ทธ์™€ ํ•จ๊ป˜ ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ์ฆ‰, get ํฌ์ธํ„ฐ๊ฐ€ ํŒŒ์ผ ๋์— ์œ„์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด member ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ tellg()ํŒŒ์ผ์˜ ํฌ๊ธฐ๋ฅผ ์ง์ ‘ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŒŒ์ผ ํฌ๊ธฐ๋ฅผ ์–ป์€ ํ›„์—๋Š” ์ „์ฒด ํŒŒ์ผ์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ์„ ๋งŒํผ ํฐ ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก ํ• ๋‹น์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

memblock = new char[size];

๊ทธ ์งํ›„์— ํŒŒ์ผ์˜ ์‹œ์ž‘ ๋ถ€๋ถ„์— get ์œ„์น˜ ๋ฅผ ์„ค์ •ํ•˜๊ณ  (๋งˆ์ง€๋ง‰์— ์ด ํฌ์ธํ„ฐ๋กœ ํŒŒ์ผ์„ ์—ด์—ˆ์Œ์„ ๊ธฐ์–ตํ•˜์‹ญ์‹œ์˜ค) ์ „์ฒด ํŒŒ์ผ์„ ์ฝ๊ณ  ๋งˆ์ง€๋ง‰์œผ๋กœ ๋‹ซ์Šต๋‹ˆ๋‹ค.

file.seekg (0, ios::beg);
file.read (memblock, size);
file.close();

์ด ์‹œ์ ์—์„œ ์šฐ๋ฆฌ๋Š” ํŒŒ์ผ์—์„œ ์–ป์€ ๋ฐ์ดํ„ฐ๋กœ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์šฐ๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์€ ๋‹จ์ˆœํžˆ ํŒŒ์ผ์˜ ๋‚ด์šฉ์ด ๋ฉ”๋ชจ๋ฆฌ์— ์žˆ์Œ์„ ์•Œ๋ฆฌ๊ณ  ๋๋‚ฉ๋‹ˆ๋‹ค.

๋ฒ„ํผ ๋ฐ ๋™๊ธฐํ™”

ํŒŒ์ผ ์ŠคํŠธ๋ฆผ์œผ๋กœ ์ž‘์—…ํ•  ๋•Œ ์ด๋Ÿฌํ•œ ์ŠคํŠธ๋ฆผ์€ ์œ ํ˜•์˜ ๋‚ด๋ถ€ ๋ฒ„ํผ ๊ฐœ์ฒด์™€ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค streambuf. ์ด ๋ฒ„ํผ ๊ฐ์ฒด๋Š” ์ŠคํŠธ๋ฆผ๊ณผ ์‹ค์ œ ํŒŒ์ผ ์‚ฌ์ด์˜ ์ค‘๊ฐœ์ž ์—ญํ• ์„ ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ๋ธ”๋ก์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฅผ ์‚ฌ์šฉ ofstreamํ•˜๋ฉด ๋ฉค๋ฒ„ ํ•จ์ˆ˜ put(๋‹จ์ผ ๋ฌธ์ž๋ฅผ ๊ธฐ๋กํ•จ)๊ฐ€ ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ŠคํŠธ๋ฆผ์ด ์—ฐ๊ฒฐ๋œ ์‹ค์ œ ํŒŒ์ผ์— ์ง์ ‘ ๊ธฐ๋ก๋˜๋Š” ๋Œ€์‹  ์ด ์ค‘๊ฐ„ ๋ฒ„ํผ์— ๋ฌธ์ž๊ฐ€ ์‚ฝ์ž…๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์šด์˜ ์ฒด์ œ๋Š” ํŒŒ์ผ ์ฝ๊ธฐ ๋ฐ ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•œ ๋ฒ„ํผ๋ง์˜ ๋‹ค๋ฅธ ๊ณ„์ธต์„ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฒ„ํผ๊ฐ€ ํ”Œ๋Ÿฌ์‹œ๋˜๋ฉด ๋ฒ„ํผ์— ํฌํ•จ๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฆฌ์  ๋งค์ฒด์— ๊ธฐ๋ก๋ฉ๋‹ˆ๋‹ค(์ถœ๋ ฅ ์ŠคํŠธ๋ฆผ์ธ ๊ฒฝ์šฐ). ์ด ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™๊ธฐํ™” ๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.๋‹ค์Œ ์ƒํ™ฉ ์ค‘ ํ•˜๋‚˜์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

  • ํŒŒ์ผ์ด ๋‹ซํž ๋•Œ: ํŒŒ์ผ ์„ ๋‹ซ๊ธฐ ์ „์— ์•„์ง ํ”Œ๋Ÿฌ์‹œ๋˜์ง€ ์•Š์€ ๋ชจ๋“  ๋ฒ„ํผ๊ฐ€ ๋™๊ธฐํ™”๋˜๊ณ  ๋ณด๋ฅ˜ ์ค‘์ธ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฌผ๋ฆฌ์  ๋งค์ฒด์— ์“ฐ๊ฑฐ๋‚˜ ์ฝํž™๋‹ˆ๋‹ค.
  • ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐผ์„ ๋•Œ: ๋ฒ„ํผ๋Š” ํŠน์ • ํฌ๊ธฐ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ๋ฒ„ํผ๊ฐ€ ๊ฐ€๋“ ์ฐจ๋ฉด ์ž๋™์œผ๋กœ ๋™๊ธฐํ™”๋ฉ๋‹ˆ๋‹ค.
  • ๋ช…์‹œ์ ์œผ๋กœ, ์กฐ์ž‘์ž์™€ ํ•จ๊ป˜: ์ŠคํŠธ๋ฆผ์—์„œ ํŠน์ • ์กฐ์ž‘์ž๊ฐ€ ์‚ฌ์šฉ๋˜๋ฉด ๋ช…์‹œ์  ๋™๊ธฐํ™”๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ์กฐ์ž‘์ž๋Š” flush๋ฐ endl.
  • ๋ช…์‹œ์ ์œผ๋กœ ๋ฉค๋ฒ„ ํ•จ์ˆ˜ sync() ์‚ฌ์šฉ: ์ŠคํŠธ๋ฆผ์˜ ๋ฉค๋ฒ„ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ sync()ํ•˜๋ฉด ์ฆ‰๊ฐ์ ์ธ ๋™๊ธฐํ™”๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ŠคํŠธ๋ฆผ์— ์—ฐ๊ฒฐ๋œ ๋ฒ„ํผ๊ฐ€ ์—†๊ฑฐ๋‚˜ ์‹คํŒจํ•œ ๊ฒฝ์šฐ -1int ๊ณผ ๊ฐ™์€ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด(์ŠคํŠธ๋ฆผ ๋ฒ„ํผ๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ๋™๊ธฐํ™”๋œ ๊ฒฝ์šฐ) ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค .0

'๐Ÿ“ Development Study > ๐Ÿ‘จ๐Ÿพโ€๐Ÿ’ป C++' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

์Šค๋งˆํŠธ ํฌ์ธํ„ฐ  (0) 2023.01.03
์ „์ฒ˜๋ฆฌ๊ธฐ #define  (1) 2022.08.22
exception  (0) 2022.08.22
ํ˜•๋ณ€ํ™˜  (0) 2022.08.22
๋‹คํ˜•์„ฑ  (0) 2022.08.22

๋Œ“๊ธ€