一、C++中流和流操作符

  C++中把数据之间的传输操作称为流,流既可以表示数据从内存传送到某个载体或设备中,即输出流,也可以表示数据从某个载体或设备传送到内存缓冲区变量中,即输入流。C++输入输出除了read和write函数,还提供流操作符,可以重在,输入流操作符">>"和输出流操作符"<<"。

  • 标准I/O流:内存与标准输入输出设备之间信息的传递;《iostream》
  • 文件I/O流:内存与外部文件之间信息的传递;《fstream》
  • 字符串I/O流:内存变量与表示字符串流的字符数组之间信息的传递《sstream》

二、文件流的基本操作

  1.确定文件打开的模式。可以选的模式主要有:

ios::in 为输入(读)而打开一个文件
ios::out 为输出(写)而打开文件 
ios::ate 初始位置:文件尾 
ios::app 所有输出附加在文件末尾 
ios::trunc 如果文件已存在则先删除该文件 
ios::binary 二进制方式

  2.默认情况下是以文本的方式写文件,并且会删除原本文件中的数据,即ios::trunc

  3.判断文件是否正常打开。好的文件操作习惯是,每次打开一个文件后,在进行文件写之前要判断文件是否正常打开,使用的函数是is_open()。

  4.文件写。主要有下面三函数,<< 流操作符,写一个字符put(),写一块数据write;

std::ostream::operator<<
std::ostream::put
std::ostream::write

5.文件读。主要有流操作符>>,读一个字符get,读一行getline,读文件中一块read

std::istream::operator>>
istream& operator>> (int& val);
std::istream::getline
istream& getline (char* s, streamsize n );
istream& getline (char* s, streamsize n, char delim );
std::getline (string)
istream& getline (istream& is, string& str, char delim);
istream& getline (istream& is, string& str);
std::istream::read
istream& read (char* s, streamsize n);
std::istream::get
istream& get (char& c);

6.文件结尾的判断 infile.eof()

7.文件关闭 infile.close()

8.文件定位 seekp(),seekg()

9.文件修改,见实例

1.1 文件写

#include <string>
#include <iostream>
#include <fstream> using namespace std;
int main() {
/*
* ios::app:添加,ios::trunc:如果文件存在,先删除该文件(默认)
* bios::binary 二进制方式读写,默认是文本方式
*/
ofstream outfile("testfile.txt",ios::out | ios::trunc);
if(!outfile.is_open()){
cerr << "file cannot open!" << endl;
return -;
} outfile << "This is a test.\n";
outfile << << endl; outfile.put('c'); // write a char.
outfile.put('\n'); char buffer[] = "abc";
outfile.write(buffer,sizeof(buffer)); // write a block. outfile.close(); return ;
}

1.2 文件读

#include <string>
#include <iostream>
#include <fstream> using namespace std;
int main() { ifstream infile("testfile.txt");
if (!infile.is_open()) {
cerr << "file cannot open!" << endl;
return -;
} //读一个字符
char ch;
infile.get(ch); //读一个字符串
string word;
infile >> word; //读一行 常用
infile.seekg();
string line;
getline(infile, line); char buffer[];
infile.seekg(); //定位到文件头
infile.getline(buffer, sizeof(buffer)); //读文件块
infile.seekg();
infile.read(buffer, sizeof(buffer)); //判断文件结尾
infile.seekg();
while (!infile.eof()) {
getline(infile,line);
// infile >> word;
// infile.read(buffer,sizeof(buffer));
} infile.close();
return ;
}

1.3 文件内容修改

#include <fstream>

using namespace std;
int main() {
fstream inOutFile("testfile.txt",ios::in | ios::out);
inOutFile.seekg();
inOutFile << "修改文件很容易!\n";
inOutFile.close();
return ;
}

最新文章

  1. 对Android开发者有益的40条优化建议
  2. DP~数塔(hrbustoj1004)
  3. hdu 1257 最少拦截系统
  4. TQ2440开发板网络配置方式
  5. 关于 ls 命令的一个小小的缺陷
  6. java 正则表达式抽取
  7. div style设置隐藏多余字, title设置鼠标放上显示出来全部
  8. 如何解决chrome 等浏览器不支持本地ajax请求的问题
  9. express实践(一)
  10. sb error
  11. Android简易实战教程--第六话《开发一键锁屏应用2&#183;完成》
  12. webstorm允许移动端访问本地html页面的方法
  13. linux路由
  14. mvc后台上传
  15. jquery load 陷阱【原】
  16. 从前端和后端两个角度分析jsonp跨域访问(完整实例)
  17. [Android实例] Android Studio插件-自动根据布局生成Activity等代码1.4 (开源)(申明:来源于网络)
  18. InnoDB支持的最大事务数量
  19. Android中检测字符编码(GB2312,ASCII,UTF8,UNICODE,TOTAL——ENCODINGS)方法(一)
  20. Docker实战(九)之数据库应用

热门文章

  1. 开源WebGIS实施方案(三):Shapefile数据导入到PostGIS
  2. WebApi 插件式构建方案:IOC 容器初始化
  3. solr介绍一:Analyzer(分析器)、Tokenizer(分词器)
  4. 通过代码去执行testNG用例
  5. 「HEOI2014」南园满地堆轻絮
  6. iOS 禁止多按钮同时响应
  7. PL/SQL控制语句(二、循环控制语句)
  8. JZOJ6096 森林
  9. 常见的vue面试题
  10. 牛客OI赛制测试赛1 题解