通过构造函数打开I/O流
其中filename表示文件路径,mode表示打开模式
ifstream (const char* filename ,openmode mode)
ofstream(const char* filename , openmode mode);
fstream (const char* filename , openmode mode);
打开文件用于写入,不存在则创建,存在则清空
适用于ofstream(缺省)/fstream
打开文件用于追加,不存在则创建,存在不清空
适用于ofstream/fstream
打开时清空原内容
适用于ofstream/fstream
打开文件用于读取,不存在则失败,存在不清空
适用于ifstream(缺省)/fstream
打开时定位文件尾
适用于ifstream/fstream
以二进制模式读写
适用于ifstream/ofstream/fstream
#include#include using namespace std; // C++标准库已经设计好的类ofstream(文件输出流)类 int main( void ){ ofstream ofs1("./file",ios::out); if(!ofs1){ // !(ofs1.operator bool()) cout << "ofs1流对象状态错误 -- 打开文件失败" << endl; } ofs1 << 1234 << ' ' << 56.78 << ' ' << "Hello" << '\n'; if(!ofs1){ cout << "ofs1流对象状态错误 -- 写文件失败" << endl; } ofs1.close(); ofstream ofs2("./file",ios::app); if(!ofs2){ // !(ofs2.operator bool()) cout << "ofs2流对象状态错误 -- 打开文件失败" << endl; } ofs2 << "World" << endl;; if(!ofs2){ cout << "ofs2流对象状态错误 -- 写文件失败" << endl; } ofs2.close(); return 0; }
#include#include using namespace std; // C++标准库已经设计好的类ifstream(文件输入流)类 int main( void ){ ifstream ifs1("./file",ios::in); if(!ifs1){ // !(ifs1.operator bool()) cout << "ifs1流对象状态错误 -- 打开文件失败" << endl; } int i; double d; string s1,s2; ifs1 >> i >> d >> s1 >> s2; if(!ifs1){ cout << "ifs1流对象状态错误 -- 读文件失败" << endl; } cout << i << ' ' << d << ' ' << s1 << ' ' << s2 << endl; ifs1.close(); ifstream ifs2("./file",ios::ate); if(!ifs2){ // !(ifs2.operator bool()) cout << "ifs2流对象状态错误 -- 打开文件失败" << endl; } ifs2.seekg(0,ios::beg); int ii; double dd; string ss1,ss2; ifs2 >> ii >> dd >> ss1 >> ss2; if(!ifs2){ cout << "ifs2流对象状态错误 -- 读文件失败" << endl; } cout << ii << ' ' << dd << ' ' << ss1 << ' ' << ss2 << endl; ifs2.close(); return 0; }
l/O流类对象支持到bool类型的隐式转换
处于1或4状态的流,在复位前无法工作
#include#include using namespace std; // C++标准库已经设计好的类ifstream(文件输入流)类 int main( void ){ ifstream ifs2("./file",ios::ate); if(!ifs2){ // !(ifs2.operator bool()) cout << "ifs2流对象状态错误 -- 打开文件失败" << endl; } int ii; double dd; string ss1,ss2; cout << "--------------------第一次读数据-----------------------" << endl; ifs2 >> ii >> dd >> ss1 >> ss2;// ifs2.operator>>(ii).operator>>(dd)>>operator>>(ss1)>>operator>>(ss2) if(!ifs2){ cout << "ifs2流对象状态错误 -- 读文件失败" << endl; cout << "ifs2是0状态吗?" << ifs2.good() << ", ifs2是1状态吗?" << ifs2.bad() << ", ifs2是2状态吗?" << ifs2.eof() << ", ifs2是4状态吗?" << ifs2.fail() << endl; cout << "ifs2的具体状态:" << ifs2.rdstate() << endl; } cout << ii << ' ' << dd << ' ' << ss1 << ' ' << ss2 << endl; ifs2.clear(); ifs2.seekg(0,ios::beg); cout << "--------------------第二次读数据-----------------------" << endl; ifs2 >> ii >> dd >> ss1 >> ss2;// ifs2.operator>>(ii).operator>>(dd)>>operator>>(ss1)>>operator>>(ss2) if(!ifs2){ cout << "ifs2流对象状态错误 -- 读文件失败" << endl; cout << "ifs2是0状态吗?" << ifs2.good() << ", ifs2是1状态吗?" << ifs2.bad() << ", ifs2是2状态吗?" << ifs2.eof() << ", ifs2是4状态吗?" << ifs2.fail() << endl; cout << "ifs2的具体状态:" << ifs2.rdstate() << endl; } cout << ii << ' ' << dd << ' ' << ss1 << ' ' << ss2 << endl; ifs2.close(); return 0; }
ostream& ostream::put (char ch);一次向输出流写入一个字符,返回流本身
ostream& ostream::flush (void);将输出流缓冲区中的数据刷到设备上,返回流本身
int istream::get (void);成功返回读到的字符,失败或遇到文件尾返回EOF
istream& istream::get (char& ch);返回输入流本身,其在布尔上下文中的值,成功为true,失败或遇到文件尾为false
istream& istream::getline (char* buffer,streamsize num, char delim = ‘\ n’);
#include#include using namespace std; // C++标准库已经设计好的类ofstream(文件输出流)、ifstream(文件输入流)类 int main( void ){ ofstream ofs("./noformat",ios::out); if(!ofs) cout << "ofs流对象状态错误 -- 打开文件失败" << endl; for( char c = ' '; c <= '~';c++) ofs.put(c).flush(); ofs.close(); ifstream ifs("./noformat",ios::in); if(!ifs) cout << "ifs流对象状态错误 -- 打开文件失败" << endl; char c; // 单參get while(1){ ifs.get(c); if(!ifs) break; else cout << c; } cout << endl; ifs.clear(); ifs.seekg(0,ios::beg); // 无參get while(1){ c = ifs.get(); if( c == EOF ) break; else cout << c; } cout << endl; ifs.close(); return 0; }
#include#include using namespace std; // C++标准库已经设计好的类ofstream(文件输出流)、ifstream(文件输入流)类 int main( void ){ ifstream ifs("./getline",ios::in); if(!ifs) cout << "ifs流对象状态错误 -- 打开文件失败" << endl; char buf[256]; while(1){ ifs.getline(buf,256,'\n'); if(!ifs) break; else{ cout << buf << endl; cout << "ifs流对象状态值:" << ifs.rdstate() << endl; } } /* ifs.getline(buf,256,'\n'); // aa\n cout << buf << endl; cout << "ifs流对象状态值:" << ifs.rdstate() << endl; ifs.getline(buf,256,'\n'); // bbbb\n cout << buf << endl; cout << "ifs流对象状态值:" << ifs.rdstate() << endl; ifs.getline(buf,256,'\n'); // cccccc\n cout << buf << endl; cout << "ifs流对象状态值:" << ifs.rdstate() << endl; ifs.getline(buf,256,'\n'); // dddddddd\n cout << buf << endl; cout << "ifs流对象状态值:" << ifs.rdstate() << endl; ifs.getline(buf,256,'\n'); // 0123456789\n cout << buf << endl; cout << "ifs流对象状态值:" << ifs.rdstate() << endl; ifs.getline(buf,256,'\n'); // cout << buf << endl; cout << "ifs流对象状态值:" << ifs.rdstate() << endl; */ ifs.close(); return 0; }
istream& istream::read (char* buffer,streamsize num)
streamsize istream::gcount (void)
#include#include using namespace std; // C++标准库已经设计好的类ofstream(文件输出流)、ifstream(文件输入流)类 int main( void ){ ofstream ofs("./binary",ios::out); if(!ofs) cout << "ofs流对象状态错误 -- 打开文件失败" << endl; ifstream ifs("./getline",ios::in); if(!ifs) cout << "ifs流对象状态错误 -- 打开文件失败" << endl; char buf[3]; while(1){ ifs.read(buf,3); if(ifs){ ofs.write(buf,3); // cout << buf; // 读满3个字符 } else{ // 没有读满3个字符 int len = ifs.gcount(); ofs.write(buf,len); // buf[len]=' '; // cout << buf; break; } } ifs.close(); ofs.close(); return 0; }
ostream& ostream::write (const char* buffer,streamsize num);返回最后一次从输入流中读取的字节数
返回流本身,其在布尔上下文中的值,成功(写满)为true,失败(没写满)为falseusing namespace std; // C++标准库已经设计好的类ofstream(文件输出流)、ifstream(文件输入流)类 int main( void ){ ofstream ofs("./binary",ios::out); if(!ofs) cout#include #include << "ofs流对象状态错误 -- 打开文件失败" << endl; ifstream ifs("./getline",ios::ate); if(!ifs) cout << "ifs流对象状态错误 -- 打开文件失败" << endl; int size = ifs.tellg(); char buf[size]; ifs.seekg(0,ios::beg); ifs.read(buf,size); ofs.write(buf,size); ifs.close(); ofs.close(); return 0; }
istream& istream::seekg (off_type offset,ios::seekdir origin); ostream& ostream::seekg (off_type offset,ios::seekdir origin);
pos type istream::tellg (void); pos type ostream::tellp (void):ios::end从文件最后一个字节的下一个位置offset为负/正表示向文件头/尾的方向偏移
读/写指针被移到文件头之前或文件尾之后,则失败
输出字符串流
ostringstream oss ; oss#include << 1234 << ' ' << 56.78 <<' '<< "ABCD"; string os = oss.str();
输入字符串流
string is ("1234 56.78 ABCD") ; istringstream iss (is); int i; double d; string s; iss >> i >> d >> s;#include
上一篇:linux进程通信