[C++]2ºÎ°­ÁÂ(63)<--ÆÄÀÏ ÀÔÃâ·Â





ofstream°ú ifstreamÀº ¸ðµç °ÍÀÌ °ÅÀÇ µ¿ÀÏÇÏ´Ù. »ý¼ºÀÚµµ ¶È°°Àº ÇüŸ¦(¹°
·Ð À̸§Àº ´Ù¸£°í) °¡Áö¸ç ¸â¹ö ÇÔ¼ö open, closeµµ µ¿ÀÏÇÏ´Ù. ´Ù¸¸ ofstream:
:openÀº µðÆúÆ® open ¸ðµå°¡ ios::outÀÌÁö¸¸ ifstream::openÀº ios::inÀÌ´Ù.
ÀÌÀ¯´Â Ŭ·¡½ºÀÇ ¼º°Ý¿¡ ÃÖ´ëÇÑ ºÎÇյǴ open ¸ðµå¸¦ Á¦°øÇØ ÁÖ±â À§ÇÔÀÌ´Ù.
À§ ¿¹Á¦¿¡¼­´Â ifstreamÇü °´Ã¼ infileÀ» ¸ÕÀú ¸¸µç ÈÄ open ÇÔ¼ö¸¦ »ç¿ëÇØ ÆÄ
ÀÏÀ» openÇϵµ·Ï ÇÏ¿´´Ù. ³ª¸ÓÁö ±¸¹®Àº ±âº»ÀûÀÎ ºÎºÐÀ̹ǷΠ°¢ÀÚ°¡ ½º½º·Î
ºÐ¼®Çغ¸±â ¹Ù¶õ´Ù. ´ÙÀ½Àº ÀԷ°ú Ãâ·ÂÀ» µ¿½Ã¿¡ ÇÏ´Â ÆÄÀÏ º¹»ç ÇÁ·Î±×·¥À»
¸¸µé¾î º¸ÀÚ. 16Àå¿¡¼­ ¸¸µé¾ú´ø FILE ½ºÆ®¸²À» »ç¿ëÇÏ´ø ¿¹Á¦¸¦ I/O ½ºÆ®¸²Çü
À¸·Î ¸¸µé¾î º» °ÍÀÌ´Ù.

#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
void main(int argc,char *argv[])
{
ifstream infile;
ofstream outfile;
char ch;
if (argc<2) exit(0);
infile.open(argv[1],ios::in | ios::binary);
if (!infile) cout << "Errore " << argv[1] << '\n';
outfile.open(argv[2],ios::out | ios::binary);
if (!outfile) cout << "Error  "  <<  argv[2]  <<  '\n';
while (infile.get(ch)) outfile.put(ch);  //ÇÑ ¹®ÀÚ¾¿ º¹»ç
infile.close();
outfile.close();
cout << "\ncopy completed. \n";
}

¿ª½Ã ¾î·Á¿î ±¸¹®ÀÌ º°·Î ¾øÀÌ ½±°Ô ÀÌÇØ°¡ µÇ´Â °£´ÜÇÑ ¿¹Á¦ÀÌ´Ù. ÇÑ °¡Áö
ÁÖÀÇ ÇÒ °ÍÀº ÆÄÀÏ º¹»ç¸¦ ÇÏ´Â ¿¹Á¦ÀÎ ¸¸Å­ ¹Ýµå½Ã ÀÌÁø ¸ðµå·Î openÇØ¾ß Á¦
´ë·Î º¹»ç°¡ µÈ´Ù. ±×·¸Áö ¾ÊÀ¸¸é ÅؽºÆ® ÆÄÀϸ¸ º¹»çµÈ´Ù. ÀÌ ºÎºÐ¿¡ ´ëÇؼ­
µµ 16Àå¿¡¼­ ÀÚ¼¼È÷ ¼³¸íÀ» Çß¾ú´Ù. open ÇÔ¼ö°¡ µðÆúÆ®·Î Á¦°øÇÏ´Â ¿ÀǸðµå
¸¦ ¾Ê°í µ¡ºÙ¿©¼­ ios::binary ¸ðµå¸¦ Ãß°¡ÇÏ¿´´Ù.
C++ I/O ½ºÆ®¸²¿¡¼­´Â µÎ °³ÀÇ ÆÄÀÏ Æ÷ÀÎÅÍ(FP)¸¦ À¯ÁöÇÑ´Ù. ´ÙÀ½ ÀÔ·Â µ¿ÀÛ
¿¡¼­ ÀÐÇôÁú À§Ä¡¸¦ ±â¾ïÇÏ´Â ÀԷ¿ë FP¿Í ´ÙÀ½ Ãâ·Â µ¿ÀÛ¿¡¼­ ±â·ÏµÉ À§Ä¡¸¦
±â¾ïÇÏ´Â Ãâ·Â¿ë FP°¡ ±¸ºÐµÇ¾î Àֱ⠶§¹®¿¡ ÇÑ ºÎºÐ¿¡¼­ ÀÐ°í ´Ù¸¥ ºÎºÐ¿¡¼­
¾²´Â °ÍÀÌ °¡´ÉÇÏ´Ù.
µÎ °³ÀÇ FP¸¦ Á¶»çÇϰųª ¼³Á¤Çϱâ À§ÇØ ´ÙÀ½°ú °°Àº 6°³ÀÇ ÇÔ¼ö°¡ Á¦°øµÈ´Ù.
Á¢¹Ì»ç g¿Í p´Â °¢°¢ get,putÀÇ ¶æÀ̸ç Á¢¹Ì»ç g°¡ ºÙÀº ÇÔ¼ö´Â ifstream Ŭ·¡
½ºÀÇ ¸â¹ö ÇÔ¼öÀÌ°í p°¡ ºÙÀº ÇÔ¼ö´Â ofstream Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼öÀÌ´Ù.

tellg()
ÀԷ¿ë FP¸¦ Á¶»çÇÑ´Ù.
tellp()
Ãâ·Â¿ë FP¸¦ Á¶»çÇÑ´Ù.
seekg(long pos)
pos À§Ä¡ÀÇ Àý´ëÀûÀÎ À§Ä¡·Î ÀԷ¿ë FP¸¦ À̵¿½ÃŲ´Ù.
seekg(long pos,seek_dir direction)
directionÀÌ ÁöÁ¤ÇÏ´Â ¹æÇâÀ¸·Î ÇöÀç À§Ä¡¿¡¼­ »ó´ëÀûÀÎ À§Ä¡·Î ÀԷ¿ë FP¸¦
À̵¿½ÃŲ´Ù.
seekp(long pos)
pos À§Ä¡ÀÇ Àý´ëÀûÀÎ À§Ä¡·Î Ãâ·Â¿ë FP¸¦ À̵¿½ÃŲ´Ù.
seekp(long pos,seek_dir direction)
directionÀÌ ÁöÁ¤ÇÏ´Â ¹æÇâÀ¸·Î ÇöÀç À§Ä¡¿¡¼­ »ó´ëÀûÀÎ À§Ä¡·Î Ãâ·Â¿ë FP¸¦
À̵¿½ÃŲ´Ù.

seek_dirÇüÀº iostream.h¿¡ ´ÙÀ½°ú °°ÀÌ Á¤ÀǵǾî ÀÖ´Â ¿­°ÅÇüÀÌ´Ù.

enum seek_dir {beg=0,cur=1, end=2};

beg´Â ÆÄÀÏÀÇ ¼±µÎ¿¡¼­ºÎÅÍ, curÀº ÇöÀç À§Ä¡¿¡¼­ºÎÅÍ end´Â ÆÄÀÏÀÇ ³¡ºÎºÐ¿¡
¼­ºÎÅÍ Ãâ¹ßÇÏ¿© FP¸¦ À̵¿½ÃŲ´Ù. 16ÀåÀÇ tell(), seek() ÇÔ¼ö¿¡¼­ »ç¿ëÇÏ´ø
SEEK_SET, SEEK_CUR, SEEK_END¿Í ±× Àǹ̰¡ ¿ÏÀüÈ÷ µ¿ÀÏÇϹǷΠ¸¸¾à ÀÌ ºÎºÐ¿¡
´ëÇØ Àß ¸ð¸£°ÚÀ¸¸é 16ÀåÀ» Âü°íÇϱ⠹ٶõ´Ù. I/O streeam ÀÔÃâ·Â½Ãµµ ´ç¿¬È÷
¿¡·¯°¡ ¹ß»ýÇÒ ¼ö ÀÖ´Ù. ÀÔÃâ·Â µµÁß¿¡ ¹ß»ýÇÏ´Â ¿¡·¯´Â ios Ŭ·¡½ºÀÇ µ¥ÀÌÅÍ
¸â¹öÀÎ status¿¡ ÀúÀåÀÌ µÇ¸ç statusÀÇ °¢ ºñÆ®ÀÇ Àǹ̴ ´ÙÀ½°ú °°ÀÌ ios Ŭ
·¡½º¿¡ ¿­°ÅÇüÀ¸·Î Á¤ÀǵǾî ÀÖ´Ù.

// stream status bits
enum io_state {
  goodbit = 0x00,  // no bit set: all is ok
  eofbit    = 0x01,    // at end of file
  failbit  = 0x02,    // last I/O operation
  failedbadbit = 0x04,  // invalid operation
  attemptedhardfail = 0x80 // unrecoverable error
};

½ºÆ®¸² ÀÔÃâ·Â Áß¿¡ ¿¡·¯°¡ ¹ß»ýÇß´Ù¸é ÇØ´çµÇ´Â ºñÆ®°ªÀÌ 1ÀÌ µÇ¸ç, ÀÔÃâ·Â
µ¿ÀÛÀº ÁߴܵȴÙ. ±×·¡¼­ ÆÄÀÏ ÀÔÃâ·Â ÀÛ¾÷Àº Ç×»ó ¿¡·¯¹ß»ý À¯¹«¸¦ Á¶»çÇϸé
¼­ ¼öÇàÇØ¾ß ÇÏ¸ç ¿¡·¯°¡ ¹ß»ýÇÑ °æ¿ì´Â ¿¡·¯¿¡ ´ëÇÑ ÀûÀýÇÑ Á¶Ä¡¸¦ ÃëÇØ ÁÖ¾î
¾ß ÇÑ´Ù. ios Ŭ·¡½º¿¡¼­´Â ÀÔÃâ·Â ¿¡·¯ flag¸¦ Á¶»ç ¹× Á¶ÀÛÇÏ´Â ´ÙÀ½°ú °°Àº
¸â¹ö ÇÔ¼öµéÀ» Á¦°øÇÑ´Ù.

int rdstate();
ÀÔ·Â¿ë ¿¡·¯ flag°ªÀ» Á¶»çÇÑ´Ù. {return state;} ·Î Á¤ÀǵǾî ÀÖ´Ù.

int clear(int=0);
¿¡·¯ flag¸¦ ¼³Á¤ÇÑ´Ù. µðÆúÆ® parameter°¡ 0À̹ǷΠ´Ü¼øÈ÷ clear()¸¦ È£ÃâÇÏ
¸é ¿¡·¯ flag°¡ resetµÈ´Ù.

int good();
state°¡ 0À̸é Âü(0 ÀÌ¿ÜÀÇ °ª)À» ¸®ÅÏÇÏ°í state°¡ 0 ¾Æ´Ï¸é Áï ¿¡·¯°¡ ¹ß»ý
ÇßÀ¸¸é 0À» ¸®ÅÏÇÑ´Ù.

int eof();
stateÀÇ eofbit°¡ 1ÀÎ °æ¿ì¿¡ Âü°ªÀ» ¸®ÅÏÇÑ´Ù. ÆÄÀÏÀÇ ³¡¿¡ µµ´ÞÇß´ÂÁö Á¶»ç
ÇÑ´Ù.

int fail();
ÀÔÃâ·Â µ¿ÀÛ¿¡¼­ ¿¡·¯°¡ ¹ß»ýÇß´ÂÁö Á¶»çÇÑ´Ù. stateÀÇ failbit, badbit, hard
failÁß ÇÑ°³¶óµµ 1ÀÎ °æ¿ì Âü°ªÀ» ¹ÝȯÇÑ´Ù. ±×·¸Áö ¾ÊÀº °æ¿ì´Â 0À» ¸®ÅÏÇÑ´Ù.

int bad();
badbit³ª hardbit Áß Çϳª¶óµµ 1À̸é Âü°ªÀ» ¸®ÅÏÇÑ´Ù.


ÀÌ Ç¥¿¡¼­ good() ÀÌÇÏÀÇ ÇÔ¼öµéÀº rdstate¿Í ºñÆ® ³í¸® ¿¬»êÀ¸·Î ´ëüµÉ ¼ö
ÀÖÀ¸¸ç ¾î¶² °æ¿ì ¾î¶² °ªÀ» ¹ÝȯÇÏ´ÂÁö´Â iostream.h¸¦ Á÷Á¢ ÂüÁ¶ÇÏ¸é ¿ÀÈ÷·Á
´õ ½±°Ô ¾Ë ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¿¡·¯ 󸮸¦ Çϸ鼭 ÆÄÀÏ ÀÔÃâ·ÂÀ» ÇÏ´Â ÇÁ·Î±×·¥
Àº ´ëÃæ ´ÙÀ½°ú °°Àº ¸ð¾çÀÌ µÉ °ÍÀÌ´Ù.

ifstream infile("test");
infile >> data;
if (ios::bad()) {¿¡·¯ ó¸® }
else {ÀÔÃâ·Â ³¡³­ ÈÄÀÇ Ã³¸® }

ÀÌ ¹æ¹ýÀÌ ³í¸®»ó °£´ÜÇϱâ´Â ÇÏÁö¸¸ ´ÙÀ½°ú °°Àº ´õ ±¦ÂúÀº ¹æ¹ýµµ ÀÖ´Ù.

ifstream infile("test");
if (infile >> data) {¿¡·¯ ó¸®}
else {ÀÔÃâ·ÂÀÌ ³¡³­ ÈÄÀÇ Ã³¸®}

ÀÔÃâ·Â ¿¬»êÀÚ >>, <<´Â ¿¬»êÀÌ ³¡³­ ÈÄ ÀÔÃâ·Â °´Ã¼ÀÇ reference¸¦ ¸®ÅÏÇϵµ
·Ï µÇ¾î Àִµ¥ ÀÔÃâ·Â Áß ¿¡·¯°¡ ¹ß»ýÇϸé NULL°ªÀ» ¹ÝȯÇϵµ·Ï µÇ¾î ÀÖ´Ù.
±×·¡¼­ À§¿Í °°ÀÌ ÀÔÃâ·Â ¿¬»ê½Ä ÀÚü°¡ Á¶°Ç½ÄÀ¸·Î »ç¿ëµÉ ¼ö°¡ ÀÖ´Â °ÍÀÌ´Ù.

À̾ °è¼ÓµË´Ï´Ù. ==============>>>>>>>


--------------------------------------------------------------------------------

    

 ´ÙÀ½