[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°ªÀ» ¹ÝȯÇϵµ·Ï µÇ¾î ÀÖ´Ù.
±×·¡¼ À§¿Í °°ÀÌ ÀÔÃâ·Â ¿¬»ê½Ä ÀÚü°¡ Á¶°Ç½ÄÀ¸·Î »ç¿ëµÉ ¼ö°¡ ÀÖ´Â °ÍÀÌ´Ù.
ÀÌ¾î¼ °è¼ÓµË´Ï´Ù. ==============>>>>>>>
--------------------------------------------------------------------------------
´ÙÀ½