cpp的处理流
一堆规则,没有什么特别说明的。不过流都是有缓冲区的,这点要记住了。如果不刷新缓冲区或者关闭文件,数据内容可能不会进入文件。
流 数据的封装
数据缓冲
流和缓冲区
streambuf 类管理缓冲区,提供填充,清空,刷新,处理缓冲区的功能
ios 输出和输入的基础类,它有一个成员变量为streambuf
istream和ostream 从ios派生专门管理输入输出行为
iostream从istream 和ostream派生,处理屏幕输出
fstream 处理文件的输入和输出
标准io对象
cin
cout
cerr
clog
流的简单操作,比较琐碎,简单的明白即可,需要的时候取查阅手册
cout << xxx;
cin >> xxx;
简单的文件读写
ios:app 附加到文件的末尾
ios:ate 调到文件的末尾但是可以在文件的任何地方写入数据
ios:trunc 删除已有的文件的内容
ios:nocreate 如果文件不存在,打开操作失败
ios:noreplace 如果文件以及存在 打开操作失败
ios::binary
二进制文件读写
见代码
//
// main.cpp
// use_stream
//
// Created by bikang on 16/11/1.
// Copyright (c) 2016年 bikang. All rights reserved.
//
#include <iostream>
#include <fstream>
using namespace std;
void tstream(int argc, const char * argv[]);
void tcin();
int main(int argc, const char * argv[]) {
//tcin();
tstream(argc,argv);
return 0;
}
void tcin(){
int mInt;
cin >> mInt;
cout << mInt;
}
void tstream(int argc, const char * argv[]){
//简单的文件多谢
cout << "tstream"<< endl;
string filename = "test123.log";
ofstream fout(filename);
if(fout){
fout << "line go go"<< endl;
fout << "567"<< endl;
fout << "234"<< endl;
fout.close();
}
char buf[4096];
ifstream fin(filename);
if(fin){
while(!fin.eof()){
fin.getline(buf, 4096);
cout << buf << endl;
}
}
fstream fp(filename,ios::app);
if(fp){
fp << "dd";
fp.close();
}
//二进制数据
ofstream fout2(filename,ios::binary|ios::app);
if(fout2){
fout2.write("hello", 6);
fout2.close();
}
ifstream fin2(filename,ios::binary);
if(fin2){
while (!fin2.eof()) {
fin2.read(buf,4096);
cout << buf;
}
fin2.close();
}
//命令行
cout << endl;
for(int i=0;i<argc;++i){
cout << argv[i]<<endl;
}
}