C++ ͨ¹ýÒÔϼ¸¸öÀàÖ§³ÖÎļþµÄÊäÈëÊä³ö£º
ofstream: д²Ù×÷£¨Êä³ö£©µÄÎļþÀà (ÓÉostreamÒýÉê¶øÀ´)
ifstream: ¶Á²Ù×÷£¨ÊäÈ룩µÄÎļþÀà(ÓÉistreamÒýÉê¶øÀ´)
fstream: ¿Éͬʱ¶Áд²Ù×÷µÄÎļþÀà (ÓÉiostreamÒýÉê¶øÀ´)
´ò¿ªÎļþ(Open a file)
¶ÔÕâЩÀàµÄÒ»¸ö¶ÔÏóËù×öµÄµÚÒ»¸ö²Ù×÷ͨ³£¾ÍÊǽ«ËüºÍÒ»¸öÕæÕýµÄÎļþÁªÏµÆðÀ´£¬Ò²¾ÍÊÇ˵´ò¿ªÒ»¸öÎļþ¡£±»´ò¿ªµÄÎļþÔÚ³ÌÐòÖÐÓÉÒ»¸öÁ÷¶ÔÏó(stream
object)À´±íʾ (ÕâЩÀàµÄÒ»¸öʵÀý) £¬¶ø¶ÔÕâ¸öÁ÷¶ÔÏóËù×öµÄÈκÎÊäÈëÊä³ö²Ù×÷ʵ¼Ê¾ÍÊǶԸÃÎļþËù×öµÄ²Ù×÷¡£
Ҫͨ¹ýÒ»¸öÁ÷¶ÔÏó´ò¿ªÒ»¸öÎļþ£¬ÎÒÃÇʹÓÃËüµÄ³ÉÔ±º¯Êýopen()£ºvoid open (const char
* filename, openmode mode);
ÕâÀïfilename ÊÇÒ»¸ö×Ö·û´®£¬´ú±íÒª´ò¿ªµÄÎļþÃû£¬mode ÊÇÒÔϱêÖ¾·ûµÄÒ»¸ö×éºÏ£º ios::in
ΪÊäÈë(¶Á)¶ø´ò¿ªÎļþ
ios::out ΪÊä³ö(д)¶ø´ò¿ªÎļþ
ios::ate ³õʼλÖãºÎļþβ
ios::app ËùÓÐÊä³ö¸½¼ÓÔÚÎļþĩβ
ios::trunc Èç¹ûÎļþÒÑ´æÔÚÔòÏÈɾ³ý¸ÃÎļþ
ios::binary ¶þ½øÖÆ·½Ê½
ÕâЩ±êʶ·û¿ÉÒÔ±»×éºÏʹÓã¬ÖмäÒÔ¡±»ò¡±²Ù×÷·û(|)¼ä¸ô¡£ÀýÈ磬Èç¹ûÎÒÃÇÏëÒªÒÔ¶þ½øÖÆ·½Ê½´ò¿ªÎļþ¡±example.bin¡±
À´Ð´ÈëһЩÊý¾Ý£¬ÎÒÃÇ¿ÉÒÔͨ¹ýÒÔÏ·½Ê½µ÷ÓóÉÔ±º¯Êýopen£¨£©À´ÊµÏÖ£º
ofstream file; file.open ("example.bin", ios::out | ios::app | ios::binary); |
ofstream, ifstream ºÍ fstreamËùÓÐÕâЩÀàµÄ³ÉÔ±º¯Êýopen ¶¼°üº¬ÁËÒ»¸öĬÈÏ´ò¿ªÎļþµÄ·½Ê½£¬ÕâÈý¸öÀàµÄĬÈÏ·½Ê½¸÷²»Ïàͬ£º
Àà ²ÎÊýµÄĬÈÏ·½Ê½
ofstream ios::out | ios::trunc
ifstream ios::in
fstream ios::in | ios::out
Ö»Óе±º¯Êý±»µ÷ÓÃʱûÓÐÉùÃ÷·½Ê½²ÎÊýµÄÇé¿öÏ£¬Ä¬ÈÏÖµ²Å»á±»²ÉÓá£Èç¹ûº¯Êý±»µ÷ÓÃʱÉùÃ÷ÁËÈκβÎÊý£¬Ä¬ÈÏÖµ½«±»ÍêÈ«¸Äд£¬¶ø²»»áÓëµ÷ÓòÎÊý×éºÏ¡£
ÓÉ ÓÚ¶ÔÀàofstream, ifstream ºÍ fstream µÄ¶ÔÏóËù½øÐеĵÚÒ»¸ö²Ù×÷ͨ³£¶¼ÊÇ´ò¿ªÎļþ£¬ÕâЩÀà¶¼ÓÐÒ»¸ö¹¹Ô캯Êý¿ÉÒÔÖ±½Óµ÷ÓÃopen
º¯Êý£¬²¢ÓµÓÐͬÑùµÄ²ÎÊý¡£ÕâÑù£¬ÎÒÃǾͿÉÒÔͨ¹ýÒÔÏ·½Ê½½øÐÐÓëÉÏÃæÍ¬ÑùµÄ¶¨Òå¶ÔÏóºÍ´ò¿ªÎļþµÄ²Ù×÷£º
ofstream file ("example.bin", ios::out | ios::app | ios::binary); |
Á½ÖÖ´ò¿ªÎļþµÄ·½Ê½¶¼ÊÇÕýÈ·µÄ¡£
Äã¿ÉÒÔͨ¹ýµ÷ÓóÉÔ±º¯Êýis_open()À´¼ì²éÒ»¸öÎļþÊÇ·ñÒѾ±»Ë³ÀûµÄ´ò¿ªÁË£ºbool is_open();
Ëü·µ»ØÒ»¸ö²¼¶û(bool)Öµ£¬ÎªÕ棨true£©´ú±íÎļþÒѾ±»Ë³Àû´ò¿ª£¬¼Ù( false )ÔòÏà·´¡£
¹Ø±ÕÎļþ(Closing a file)
µ±Îļþ¶Áд²Ù×÷Íê³ÉÖ®ºó£¬ÎÒÃDZØÐ뽫Îļþ¹Ø±ÕÒÔʹÎļþÖØÐ±äΪ¿É·ÃÎʵġ£¹Ø±ÕÎļþÐèÒªµ÷ÓóÉÔ±º¯Êýclose()£¬Ëü¸ºÔ𽫻º´æÖеÄÊý¾ÝÅŷųöÀ´²¢¹Ø±ÕÎļþ¡£ËüµÄ¸ñʽºÜ¼òµ¥£º
Õâ¸öº¯ÊýÒ»µ©±»µ÷Óã¬ÔÏȵÄÁ÷¶ÔÏó(stream object)¾Í¿ÉÒÔ±»ÓÃÀ´´ò¿ªÆäËüµÄÎļþÁË£¬Õâ¸öÎļþÒ²¾Í¿ÉÒÔÖØÐ±»ÆäËüµÄ½ø³Ì(process)ËùÓзÃÎÊÁË¡£
Ϊ·ÀÖ¹Á÷¶ÔÏó±»Ïú»Ùʱ»¹ÁªÏµ×Å´ò¿ªµÄÎļþ£¬Îö¹¹º¯Êý(destructor)½«»á×Ô¶¯µ÷Óùرպ¯Êýclose¡£
Îı¾Îļþ(Text mode files)
Ààofstream, ifstream ºÍfstream ÊÇ·Ö±ð´Óostream, istream ºÍiostream
ÖÐÒýÉê¶øÀ´µÄ¡£Õâ¾ÍÊÇΪʲô fstream µÄ¶ÔÏó¿ÉÒÔʹÓÃÆä¸¸ÀàµÄ³ÉÔ±À´·ÃÎÊÊý¾Ý¡£
Ò»°ãÀ´Ëµ£¬ÎÒÃǽ«Ê¹ÓÃÕâЩÀàÓëͬ¿ØÖÆÌ¨(console)½»»¥Í¬ÑùµÄ³ÉÔ±º¯Êý(cin ºÍ cout)À´½øÐÐÊäÈëÊä³ö¡£ÈçÏÂÃæµÄÀýÌâËùʾ£¬ÎÒÃÇʹÓÃÖØÔØµÄ²åÈë²Ù×÷·û
// writing on a text file #include <fstream> using namespace std;
int main()
{
ofstream examplefile("example.txt");
if (examplefile.is_open())
{
examplefile << "This is a line.\n";
examplefile << "This is another line.\n";
examplefile.close();
}
return 0;
} |
´ÓÎļþÖжÁÈëÊý¾ÝÒ²¿ÉÒÔÓÃÓë cinµÄʹÓÃͬÑùµÄ·½·¨£º
// reading a text file #include <iostream> #include <fstream> #include <cstdlib> using namespace std; int main () { char buffer[256]; ifstream examplefile("example.txt"); if (! examplefile.is_open()) { cout << "Error opening file"; exit (1); } while (!examplefile.eof()) { examplefile.getline(buffer,100); cout<<buffer<< endl; } return 0; } //This is a line. //This is another line. |
ÉÏÃæµÄÀý×Ó¶ÁÈëÒ»¸öÎı¾ÎļþµÄÄÚÈÝ£¬È»ºó½«Ëü´òÓ¡µ½ÆÁÄ»ÉÏ¡£×¢ÒâÎÒÃÇʹÓÃÁËÒ»¸öеijÉÔ±º¯Êý½Ð×öeof £¬ËüÊÇifstream
´ÓÀà ios Öм̳йýÀ´µÄ£¬µ±µ½´ïÎļþĩβʱ·µ»Øtrue ¡£
״̬±êÖ¾·ûµÄÑéÖ¤(Verification of state flags)
³ýÁËeof()ÒÔÍ⣬»¹ÓÐһЩÑéÖ¤Á÷µÄ״̬µÄ³ÉÔ±º¯Êý£¨ËùÓж¼·µ»ØboolÐÍ·µ»ØÖµ£©£º
bad()
Èç¹ûÔÚ¶Áд¹ý³ÌÖгö´í£¬·µ»Ø true ¡£ÀýÈ磺µ±ÎÒÃÇÒª¶ÔÒ»¸ö²»ÊÇ´ò¿ªÎªÐ´×´Ì¬µÄÎļþ½øÐÐдÈëʱ£¬»òÕßÎÒÃÇҪдÈëµÄÉ豸ûÓÐÊ£Óà¿Õ¼äµÄʱºò¡£
fail()
³ýÁËÓëbad() ͬÑùµÄÇé¿öÏ»᷵»Ø true ÒÔÍ⣬¼ÓÉϸñʽ´íÎóʱҲ·µ»Øtrue £¬ÀýÈçµ±ÏëÒª¶ÁÈëÒ»¸öÕûÊý£¬¶ø»ñµÃÁËÒ»¸ö×ÖĸµÄʱºò¡£
eof()
Èç¹û¶ÁÎļþµ½´ïÎļþĩ⣬·µ»Øtrue¡£
good()
ÕâÊÇ×îͨÓõģºÈç¹ûµ÷ÓÃÒÔÉÏÈκÎÒ»¸öº¯Êý·µ»Øtrue µÄ»°£¬´Ëº¯Êý·µ»Ø false ¡£
ÒªÏëÖØÖÃÒÔÉϳÉÔ±º¯ÊýËù¼ì²éµÄ״̬±êÖ¾£¬Äã¿ÉÒÔʹÓóÉÔ±º¯Êýclear()£¬Ã»ÓвÎÊý¡£
»ñµÃºÍÉèÖÃÁ÷Ö¸Õë(get and put stream pointers)
ËùÓÐÊäÈë/Êä³öÁ÷¶ÔÏó(i/o streams objects)¶¼ÓÐÖÁÉÙÒ»¸öÁ÷Ö¸Õ룺
ifstream£¬ ÀàËÆistream, ÓÐÒ»¸ö±»³ÆÎªget pointerµÄÖ¸Õ룬ָÏòÏÂÒ»¸ö½«±»¶ÁÈ¡µÄÔªËØ¡£
ofstream, ÀàËÆ ostream, ÓÐÒ»¸öÖ¸Õë put pointer £¬Ö¸ÏòдÈëÏÂÒ»¸öÔªËØµÄλÖá£
fstream, ÀàËÆ iostream, ͬʱ¼Ì³ÐÁËget ºÍ put
ÎÒÃÇ¿ÉÒÔͨ¹ýʹÓÃÒÔϳÉÔ±º¯ÊýÀ´¶Á³ö»òÅäÖÃÕâЩָÏòÁ÷ÖжÁдλÖõÄÁ÷Ö¸Õ룺
tellg() ºÍ tellp()
ÕâÁ½¸ö³ÉÔ±º¯Êý²»Óô«Èë²ÎÊý£¬·µ»Øpos_type ÀàÐ͵ÄÖµ(¸ù¾ÝANSI-C++ ±ê×¼) £¬¾ÍÊÇÒ»¸öÕûÊý£¬´ú±íµ±Ç°get
Á÷Ö¸ÕëµÄλÖà (ÓÃtellg) »ò put Á÷Ö¸ÕëµÄλÖÃ(ÓÃtellp).
seekg() ºÍseekp()
Õâ¶Ôº¯Êý·Ö±ðÓÃÀ´¸Ä±äÁ÷Ö¸Õëget ºÍputµÄλÖá£Á½¸öº¯Êý¶¼±»ÖØÔØÎªÁ½ÖÖ²»Í¬µÄÔÐÍ£º
seekg ( pos_type position ); seekp ( pos_type position ); |
ʹÓÃÕâ¸öÔÐÍ£¬Á÷Ö¸Õë±»¸Ä±äΪָÏò´ÓÎļþ¿ªÊ¼¼ÆËãµÄÒ»¸ö¾ø¶ÔλÖá£ÒªÇó´«ÈëµÄ²ÎÊýÀàÐÍÓ뺯Êý tellg ºÍtellp
µÄ·µ»ØÖµÀàÐÍÏàͬ¡£
seekg ( off_type offset, seekdir direction ); seekp ( off_type offset, seekdir direction ); |
ʹÓÃÕâ¸öÔÐÍ¿ÉÒÔÖ¸¶¨ÓɲÎÊýdirection¾ö¶¨µÄÒ»¸ö¾ßÌåµÄÖ¸Õ뿪ʼ¼ÆËãµÄÒ»¸öÎ»ÒÆ(offset)¡£Ëü¿ÉÒÔÊÇ£º
ios::beg ´ÓÁ÷¿ªÊ¼Î»ÖüÆËãµÄÎ»ÒÆ
ios::cur ´ÓÁ÷Ö¸Õ뵱ǰλÖÿªÊ¼¼ÆËãµÄÎ»ÒÆ
ios::end ´ÓÁ÷ĩβ´¦¿ªÊ¼¼ÆËãµÄÎ»ÒÆ
Á÷Ö¸Õë get ºÍ put µÄÖµ¶ÔÎı¾Îļþ(text file)ºÍ¶þ½øÖÆÎļþ(binary file)µÄ¼ÆËã·½·¨¶¼ÊDz»Í¬µÄ£¬ÒòΪÎı¾Ä£Ê½µÄÎļþÖÐÄ³Ð©ÌØÊâ×Ö·û¿ÉÄܱ»Ð޸ġ£ÓÉÓÚÕâ¸öÔÒò£¬½¨Òé¶ÔÒÔÎı¾Îļþģʽ´ò¿ªµÄÎļþ×ÜÊÇʹÓÃseekg
ºÍ seekpµÄµÚÒ»ÖÖÔÐÍ£¬¶øÇÒ²»Òª¶Ôtellg »ò tellp µÄ·µ»ØÖµ½øÐÐÐ޸ġ£¶Ô¶þ½øÖÆÎļþ£¬Äã¿ÉÒÔÈÎÒâʹÓÃÕâЩº¯Êý£¬Ó¦¸Ã²»»áÓÐÈκÎÒâÍâµÄÐÐΪ²úÉú¡£
ÒÔÏÂÀý×ÓʹÓÃÕâЩº¯ÊýÀ´»ñµÃÒ»¸ö¶þ½øÖÆÎļþµÄ´óС£º
// obtaining file size #include <iostream> #include <fstream> using namespace std;
int main ()
{
const char * filename = "example.txt";
long l,m;
ifstream file(filename, ios::in|ios::binary);
l = file.tellg();
file.seekg(0, ios::end);
m = file.tellg();
file.close();
cout <<"size of "<< filename;
cout <<" is "<< (m-l)<<"
bytes.\n";
return 0;
}
//size of example.txt is 40 bytes. |
¶þ½øÖÆÎļþ(Binary files)
ÔÚ¶þ½øÖÆÎļþÖУ¬Ê¹ÓÃ>£¬ÒÔ¼°º¯Êý£¨Èçgetline£©À´²Ù×÷·ûÊäÈëºÍÊä³öÊý¾Ý£¬Ã»ÓÐʲôʵ¼ÊÒâÒ壬ËäÈ»ËüÃÇÊÇ·ûºÏÓï·¨µÄ¡£
ÎÄ ¼þÁ÷°üÀ¨Á½¸öΪ˳Ðò¶ÁдÊý¾ÝÌØÊâÉè¼ÆµÄ³ÉÔ±º¯Êý£ºwrite ºÍ read¡£µÚÒ»¸öº¯Êý (write)
ÊÇostream µÄÒ»¸ö³ÉÔ±º¯Êý£¬¶¼ÊDZ»ofstreamËù¼Ì³Ð¡£¶øread ÊÇistream µÄÒ»¸ö³ÉÔ±º¯Êý£¬±»ifstream
Ëù¼Ì³Ð¡£Àà fstream µÄ¶ÔÏóͬʱӵÓÐÕâÁ½¸öº¯Êý¡£ËüÃǵÄÔÐÍÊÇ£º
write ( char * buffer, streamsize size ); read ( char * buffer, streamsize size ); |
ÕâÀï buffer ÊÇÒ»¿éÄÚ´æµÄµØÖ·£¬ÓÃÀ´´æ´¢»ò¶Á³öÊý¾Ý¡£²ÎÊýsize ÊÇÒ»¸öÕûÊýÖµ£¬±íʾҪ´Ó»º´æ£¨buffer£©ÖжÁ³ö»òдÈëµÄ×Ö·ûÊý¡£
// reading binary file #include <iostream> #include <fstream> using namespace std; int main () { const char * filename = "example.txt"; char * buffer; long size; ifstream file(filename, ios::in|ios::binary|ios::ate); size = file.tellg(); file.seekg(0, ios::beg); buffer = new char [size]; file.read(buffer, size); file.close(); cout <<"the complete file is in a buffer"; delete[] buffer; return 0; } //The complete file is in a buffer |
»º´æºÍͬ²½(Buffers and Synchronization)
µ±ÎÒÃǶÔÎļþÁ÷½øÐвÙ×÷µÄʱºò£¬ËüÃÇÓëÒ»¸östreambuf ÀàÐ͵Ļº´æ(buffer)ÁªÏµÔÚÒ»Æð¡£Õâ¸ö»º´æ£¨buffer£©Êµ¼ÊÊÇÒ»¿éÄÚ´æ¿Õ¼ä£¬×÷ΪÁ÷(stream)ºÍÎïÀíÎļþµÄý½é¡£ÀýÈ磬¶ÔÓÚÒ»¸öÊä³öÁ÷£¬
ÿ´Î³ÉÔ±º¯Êýput (дһ¸öµ¥¸ö×Ö·û)±»µ÷Óã¬Õâ¸ö×Ö·û²»ÊÇÖ±½Ó±»Ð´Èë¸ÃÊä³öÁ÷Ëù¶ÔÓ¦µÄÎïÀíÎļþÖе쬶øÊÇÊ×Ïȱ»²åÈëµ½¸ÃÁ÷µÄ»º´æ£¨buffer£©ÖС£
µ±»º´æ±»ÅŷųöÀ´(flush)ʱ£¬ËüÀïÃæµÄËùÓÐÊý¾Ý»òÕß±»Ð´ÈëÎïÀíýÖÊÖУ¨Èç¹ûÊÇÒ»¸öÊä³öÁ÷µÄ»°£©£¬»òÕß¼òµ¥µÄ±»Ä¨µô(Èç¹ûÊÇÒ»¸öÊäÈëÁ÷µÄ»°)¡£Õâ¸ö¹ý³Ì³ÆÎªÍ¬²½(synchronization)£¬Ëü»áÔÚÒÔÏÂÈÎÒ»Çé¿öÏ·¢Éú£º
µ±Îļþ±»¹Ø±Õʱ: ÔÚÎļþ±»¹Ø±Õ֮ǰ£¬ËùÓл¹Ã»Óб»Íêȫд³ö»ò¶ÁÈ¡µÄ»º´æ¶¼½«±»Í¬²½¡£
µ±»º´æbuffer Âúʱ:»º´æBuffers ÓÐÒ»¶¨µÄ¿Õ¼äÏÞÖÆ¡£µ±»º´æÂúʱ£¬Ëü»á±»×Ô¶¯Í¬²½¡£
¿ØÖÆ·ûÃ÷È·Ö¸Ã÷:µ±Óöµ½Á÷ÖÐÄ³Ð©ÌØ¶¨µÄ¿ØÖÆ·ûʱ£¬Í¬²½»á·¢Éú¡£ÕâЩ¿ØÖÆ·û°üÀ¨£ºflush ºÍendl¡£
Ã÷È·µ÷Óú¯Êýsync(): µ÷ÓóÉÔ±º¯Êýsync() (ÎÞ²ÎÊý)¿ÉÒÔÒý·¢Á¢¼´Í¬²½¡£Õâ¸öº¯Êý·µ»ØÒ»¸öint
Öµ£¬µÈÓÚ-1 ±íʾÁ÷ûÓÐÁªÏµµÄ»º´æ»ò²Ù×÷ʧ°Ü
ÔÚC++ÖУ¬ÓÐÒ»¸östreamÕâ¸öÀ࣬ËùÓеÄI/O¶¼ÒÔÕâ¸ö¡°Á÷¡±ÀàΪ»ù´¡µÄ£¬°üÀ¨ÎÒÃÇÒªÈÏʶµÄÎļþI/O£¬streamÕâ¸öÀàÓÐÁ½¸öÖØÒªµÄÔËËã·û£º
1¡¢²åÈëÆ÷(<<)
ÏòÁ÷Êä³öÊý¾Ý¡£±ÈÈç˵ϵͳÓÐÒ»¸öĬÈϵıê×¼Êä³öÁ÷(cout)£¬Ò»°ãÇé¿öϾÍÊÇÖ¸µÄÏÔʾÆ÷£¬ËùÒÔ£¬cout
2¡¢ÎöÈ¡Æ÷(>>)
´ÓÁ÷ÖÐÊäÈëÊý¾Ý¡£±ÈÈç˵ϵͳÓÐÒ»¸öĬÈϵıê×¼ÊäÈëÁ÷(cin)£¬Ò»°ãÇé¿öϾÍÊÇÖ¸µÄ¼üÅÌ£¬ËùÒÔ£¬cin>>x;¾Í±íʾ´Ó±ê×¼ÊäÈëÁ÷ÖжÁȡһ¸öÖ¸¶¨ÀàÐÍ(¼´±äÁ¿xµÄÀàÐÍ)µÄÊý¾Ý¡£
ÔÚC++ÖУ¬¶ÔÎļþµÄ²Ù×÷ÊÇͨ¹ýstreamµÄ×ÓÀàfstream(file stream)À´ÊµÏֵģ¬ËùÒÔ£¬ÒªÓÃÕâÖÖ·½Ê½²Ù×÷Îļþ£¬¾Í±ØÐë¼ÓÈëÍ·Îļþfstream.h¡£ÏÂÃæ¾Í°Ñ´ËÀàµÄÎļþ²Ù×÷¹ý³ÌÒ»Ò»µÀÀ´¡£
Ò»¡¢´ò¿ªÎļþ
ÔÚfstreamÀàÖУ¬ÓÐÒ»¸ö³ÉÔ±º¯Êýopen()£¬¾ÍÊÇÓÃÀ´´ò¿ªÎļþµÄ£¬ÆäÔÐÍÊÇ£º
void open(const char* filename,int mode,int access); |
²ÎÊý£º
filename£º Òª´ò¿ªµÄÎļþÃû
mode£º Òª´ò¿ªÎļþµÄ·½Ê½
access£º ´ò¿ªÎļþµÄÊôÐÔ
´ò¿ªÎļþµÄ·½Ê½ÔÚÀàios(ÊÇËùÓÐÁ÷ʽI/OÀàµÄ»ùÀà)Öж¨Ò壬³£ÓõÄÖµÈçÏ£º
ios::app£º ÒÔ×·¼ÓµÄ·½Ê½´ò¿ªÎļþ
ios::ate£º Îļþ´ò¿ªºó¶¨Î»µ½Îļþ⣬ios:app¾Í°üº¬ÓдËÊôÐÔ
ios::binary£º ÒÔ¶þ½øÖÆ·½Ê½´ò¿ªÎļþ£¬È±Ê¡µÄ·½Ê½ÊÇÎı¾·½Ê½¡£Á½ÖÖ·½Ê½µÄÇø±ð¼ûǰÎÄ
ios::in£º ÎļþÒÔÊäÈ뷽ʽ´ò¿ª
ios::out£º ÎļþÒÔÊä³ö·½Ê½´ò¿ª
ios::nocreate£º ²»½¨Á¢Îļþ£¬ËùÒÔÎļþ²»´æÔÚʱ´ò¿ªÊ§°Ü
ios::noreplace£º²»¸²¸ÇÎļþ£¬ËùÒÔ´ò¿ªÎļþʱÈç¹ûÎļþ´æÔÚʧ°Ü
ios::trunc£º Èç¹ûÎļþ´æÔÚ£¬°ÑÎļþ³¤¶ÈÉèΪ0
¿ÉÒÔÓá°»ò¡±°ÑÒÔÉÏÊôÐÔÁ¬½ÓÆðÀ´£¬Èçios::out|ios::binary
´ò¿ªÎļþµÄÊôÐÔȡֵÊÇ£º
0£ºÆÕͨÎļþ£¬´ò¿ª·ÃÎÊ
1£ºÖ»¶ÁÎļþ
2£ºÒþº¬Îļþ
4£ºÏµÍ³Îļþ
¿ÉÒÔÓá°»ò¡±»òÕß¡°+¡±°ÑÒÔÉÏÊôÐÔÁ¬½ÓÆðÀ´ £¬Èç3»ò1|2¾ÍÊÇÒÔÖ»¶ÁºÍÒþº¬ÊôÐÔ´ò¿ªÎļþ¡£
ÀýÈ磺ÒÔ¶þ½øÖÆÊäÈ뷽ʽ´ò¿ªÎļþc:config.sys
fstream file1; file1.open("c:config.sys",ios::binary|ios::in,0); |
Èç¹ûopenº¯ÊýÖ»ÓÐÎļþÃûÒ»¸ö²ÎÊý£¬ÔòÊÇÒÔ¶Á/дÆÕͨÎļþ´ò¿ª£¬¼´£º
file1.open("c:config.sys");<=>file1.open("c:config.sys",ios::in|ios::out,0); |
ÁíÍ⣬fstream»¹ÓкÍopen()Ò»ÑùµÄ¹¹Ô캯Êý£¬¶ÔÓÚÉÏÀý£¬ÔÚ¶¨ÒåµÄʱºî¾Í¿ÉÒÔ´ò¿ªÎļþÁË£º
fstream file1("c:config.sys"); |
ÌØ±ðÌá³öµÄÊÇ£¬fstreamÓÐÁ½¸ö×ÓÀࣺifstream(input file stream)ºÍofstream(outpu
file stream)£¬ifstreamĬÈÏÒÔÊäÈ뷽ʽ´ò¿ªÎļþ£¬¶øofstreamĬÈÏÒÔÊä³ö·½Ê½´ò¿ªÎļþ¡£
ifstream file2("c:pdos.def");//ÒÔÊäÈ뷽ʽ´ò¿ªÎļþ ofstream file3("c:x.123");//ÒÔÊä³ö·½Ê½´ò¿ªÎļþ |
ËùÒÔ£¬ÔÚʵ¼ÊÓ¦ÓÃÖУ¬¸ù¾ÝÐèÒªµÄ²»Í¬£¬Ñ¡Ôñ²»Í¬µÄÀàÀ´¶¨Ò壺Èç¹ûÏëÒÔÊäÈ뷽ʽ´ò¿ª£¬¾ÍÓÃifstreamÀ´¶¨Ò壻Èç¹ûÏëÒÔÊä³ö·½Ê½´ò¿ª£¬¾ÍÓÃofstreamÀ´¶¨Ò壻Èç¹ûÏëÒÔÊäÈë/Êä³ö·½Ê½À´´ò¿ª£¬¾ÍÓÃfstreamÀ´¶¨Òå¡£
¶þ¡¢¹Ø±ÕÎļþ
´ò¿ªµÄÎļþʹÓÃÍê³ÉºóÒ»¶¨Òª¹Ø±Õ£¬fstreamÌṩÁ˳ÉÔ±º¯Êýclose()À´Íê³É´Ë²Ù×÷£¬È磺file1.close();¾Í°Ñfile1ÏàÁ¬µÄÎļþ¹Ø±Õ¡£
Èý¡¢¶ÁдÎļþ
¶ÁдÎļþ·ÖΪÎı¾ÎļþºÍ¶þ½øÖÆÎļþµÄ¶ÁÈ¡£¬¶ÔÓÚÎı¾ÎļþµÄ¶ÁÈ¡±È½Ï¼òµ¥£¬ÓòåÈëÆ÷ºÍÎöÈ¡Æ÷¾Í¿ÉÒÔÁË£»¶ø¶ÔÓÚ¶þ½øÖƵĶÁÈ¡¾ÍÒª¸´ÔÓЩ£¬ÏÂÒª¾ÍÏêϸµÄ½éÉÜÕâÁ½ÖÖ·½Ê½
1¡¢Îı¾ÎļþµÄ¶Áд
Îı¾ÎļþµÄ¶ÁдºÜ¼òµ¥£ºÓòåÈëÆ÷(>)´ÓÎļþÊäÈë¡£¼ÙÉèfile1ÊÇÒÔÊäÈ뷽ʽ´ò¿ª£¬file2ÒÔÊä³ö´ò¿ª¡£Ê¾ÀýÈçÏ£º
file2"I Love You";//ÏòÎļþдÈë×Ö·û´®"I Love You" int i; file1>>i;//´ÓÎļþÊäÈëÒ»¸öÕûÊýÖµ¡£ |
ÕâÖÖ·½Ê½»¹ÓÐÒ»ÖÖ¼òµ¥µÄ¸ñʽ»¯ÄÜÁ¦£¬±ÈÈç¿ÉÒÔÖ¸¶¨Êä³öΪ16½øÖƵȵȣ¬¾ßÌåµÄ¸ñʽÓÐÒÔÏÂһЩ
²Ù×Ý·û ¹¦ÄÜ ÊäÈë/Êä³ö
dec ¸ñʽ»¯ÎªÊ®½øÖÆÊýÖµÊý¾Ý ÊäÈëºÍÊä³ö
endl Êä³öÒ»¸ö»»Ðзû²¢Ë¢Ð´ËÁ÷ Êä³ö
ends Êä³öÒ»¸ö¿Õ×Ö·û Êä³ö
hex ¸ñʽ»¯ÎªÊ®Áù½øÖÆÊýÖµÊý¾Ý ÊäÈëºÍÊä³ö
oct ¸ñʽ»¯Îª°Ë½øÖÆÊýÖµÊý¾Ý ÊäÈëºÍÊä³ö
setpxecision(int p) ÉèÖø¡µãÊýµÄ¾«¶ÈλÊý Êä³ö
±ÈÈçÒª°Ñ123µ±×÷Ê®Áù½øÖÆÊä³ö£ºfile1<<hex<<123;Òª°Ñ3.1415926ÒÔ5λ¾«¶ÈÊä³ö£ºfile1<<setpxecision(5)<<3.1415926¡£
2¡¢¶þ½øÖÆÎļþµÄ¶Áд
¢Ùput()
put()º¯ÊýÏòÁ÷дÈëÒ»¸ö×Ö·û£¬ÆäÔÐÍÊÇofstream &put(char ch)£¬Ê¹ÓÃÒ²±È½Ï¼òµ¥£¬Èçfile1.put(¡®c¡¯);¾ÍÊÇÏòÁ÷дһ¸ö×Ö·û¡¯c¡¯¡£
¢Úget()
get()º¯Êý±È½ÏÁé»î£¬ÓÐ3ÖÖ³£ÓõÄÖØÔØÐÎʽ£º
Ò»ÖÖ¾ÍÊǺÍput()¶ÔÓ¦µÄÐÎʽ£ºifstream &get(char &ch);¹¦ÄÜÊÇ´ÓÁ÷ÖжÁȡһ¸ö×Ö·û£¬½á¹û±£´æÔÚÒýÓÃchÖУ¬Èç¹ûµ½Îļþ⣬·µ»Ø¿Õ×Ö·û¡£Èçfile2.get(x);±íʾ´ÓÎļþÖжÁȡһ¸ö×Ö·û£¬²¢°Ñ¶ÁÈ¡µÄ×Ö·û±£´æÔÚxÖС£
ÁíÒ»ÖÖÖØÔØÐÎʽµÄÔÐÍÊÇ£º int get();ÕâÖÖÐÎʽÊÇ´ÓÁ÷Öзµ»ØÒ»¸ö×Ö·û£¬Èç¹ûµ½´ïÎļþ⣬·µ»ØEOF£¬Èçx=file2.get();ºÍÉÏÀý¹¦ÄÜÊÇÒ»ÑùµÄ¡£
»¹ ÓÐÒ»ÖÖÐÎʽµÄÔÐÍÊÇ£ºifstream &get(char *buf,int num,char
delim=¡¯n¡¯)£»ÕâÖÖÐÎʽ°Ñ×Ö·û¶ÁÈëÓÉ buf Ö¸ÏòµÄÊý×飬ֱµ½¶ÁÈëÁË num ¸ö×Ö·û»òÓöµ½ÁËÓÉ delim
Ö¸¶¨µÄ×Ö·û£¬Èç¹ûûʹÓà delim Õâ¸ö²ÎÊý£¬½«Ê¹ÓÃȱʡֵ»»Ðзû¡¯n¡¯¡£ÀýÈ磺
file2.get(str1,127,¡¯A¡¯);//´ÓÎļþÖжÁÈ¡×Ö·ûµ½×Ö·û´®str1£¬µ±Óöµ½×Ö·û¡¯A¡¯»ò¶ÁÈ¡ÁË127¸ö×Ö·ûʱÖÕÖ¹¡£
¢Û¶ÁдÊý¾Ý¿é
Òª¶Áд¶þ½øÖÆÊý¾Ý¿é£¬Ê¹ÓóÉÔ±º¯Êýread()ºÍwrite()³ÉÔ±º¯Êý£¬ËüÃÇÔÐÍÈçÏ£º
read(unsigned char *buf,int num); write(const unsigned char *buf,int num); |
read() ´ÓÎļþÖжÁÈ¡ num ¸ö×Ö·ûµ½ buf Ö¸ÏòµÄ»º´æÖУ¬Èç¹ûÔÚ»¹Î´¶ÁÈë num ¸ö×Ö·ûʱ¾Íµ½ÁËÎļþ⣬¿ÉÒÔÓóÉÔ±º¯Êý
int gcount();À´È¡µÃʵ¼Ê¶ÁÈ¡µÄ×Ö·ûÊý£»¶ø write() ´Óbuf Ö¸ÏòµÄ»º´æÐ´ num ¸ö×Ö·ûµ½ÎļþÖУ¬ÖµµÃ×¢ÒâµÄÊÇ»º´æµÄÀàÐÍÊÇ
unsigned char *£¬ÓÐʱ¿ÉÄÜÐèÒªÀàÐÍת»»¡£
Àý£º
unsigned char str1[]="I Love You"; int n[5]; ifstream in("xxx.xxx"); ofstream out("yyy.yyy"); out.write(str1,strlen(str1));//°Ñ×Ö·û´®str1È«²¿Ð´µ½yyy.yyyÖÐ in.read((unsigned char*)n,sizeof(n)); //´Óxxx.xxxÖжÁȡָ¶¨¸öÕûÊý£¬×¢ÒâÀàÐÍת»» in.close();out.close(); |
ËÄ¡¢¼ì²â EOF
³ÉÔ±º¯Êýeof()ÓÃÀ´¼ì²âÊÇ·ñµ½´ïÎļþ⣬Èç¹ûµ½´ïÎļþβ·µ»Ø·Ç0Öµ£¬·ñÔò·µ»Ø0¡£ÔÐÍÊÇint eof();
Àý£º
if(in.eof())ShowMessage("ÒѾµ½´ïÎļþβ£¡"); |
Îå¡¢Îļþ¶¨Î»
ºÍ CµÄÎļþ²Ù×÷·½Ê½²»Í¬µÄÊÇ£¬C++ I/Oϵͳ¹ÜÀíÁ½¸öÓëÒ»¸öÎļþÏàÁªÏµµÄÖ¸Õë¡£Ò»¸öÊǶÁÖ¸Õ룬Ëü˵Ã÷ÊäÈë²Ù×÷ÔÚÎļþÖеÄλÖã»ÁíÒ»¸öÊÇдָÕ룬ËüÏ´Îд²Ù×÷µÄλÖá£Ã¿´ÎÖ´ÐÐÊäÈë»òÊä³öʱ£¬
ÏàÓ¦µÄÖ¸Õë×Ô¶¯±ä»¯¡£ËùÒÔ£¬C++µÄÎļþ¶¨Î»·ÖΪ¶ÁλÖúÍдλÖõĶ¨Î»£¬¶ÔÓ¦µÄ³ÉÔ±º¯ÊýÊÇ seekg()ºÍ
seekp()£¬seekg()ÊÇÉèÖöÁλÖã¬seekpÊÇÉèÖÃдλÖá£ËüÃÇ×îͨÓõÄÐÎʽÈçÏ£º
istream &seekg(streamoff offset,seek_dir origin); ostream &seekp(streamoff offset,seek_dir origin); |
streamoff¶¨ÒåÓÚ iostream.h ÖУ¬¶¨ÒåÓÐÆ«ÒÆÁ¿ offset ËùÄÜÈ¡µÃµÄ×î´óÖµ£¬seek_dir
±íÊ¾ÒÆ¶¯µÄ»ù׼λÖã¬ÊÇÒ»¸öÓÐÒÔÏÂÖµµÄö¾Ù£º
ios::beg£º Îļþ¿ªÍ·
ios::cur£º Îļþµ±Ç°Î»ÖÃ
ios::end£º Îļþ½áβ
ÕâÁ½¸öº¯ÊýÒ»°ãÓÃÓÚ¶þ½øÖÆÎļþ£¬ÒòΪÎı¾Îļþ»áÒòΪϵͳ¶Ô×Ö·ûµÄ½âÊͶø¿ÉÄÜÓëÔ¤ÏëµÄÖµ²»Í¬¡£
Àý£º
file1.seekg(1234,ios::cur);//°ÑÎļþµÄ¶ÁÖ¸Õë´Óµ±Ç°Î»ÖÃÏòºóÒÆ1234¸ö×Ö½Ú file2.seekp(1234,ios::beg);//°ÑÎļþµÄдָÕë´ÓÎļþ¿ªÍ·ÏòºóÒÆ1234¸ö×Ö½Ú |
|