一、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 ;
}

C++中文件流操作的更多相关文章

  1. (C/C++学习)2.C语言中文件流操作基本函数总结

    函数所在头文件:stdio.h 说明:前半部分主要为对各个文件流操作函数的例举,后半部分着重于上机运行分析.文中部分引用自王桂林老师的C/C++课件. 1.FIELE *fopen(const cha ...

  2. delphi 基础之三 文件流操作

    文件流操作 Delphi操作流文件:什么是流?流,简单来说就是建立在面向对象基础上的一种抽象的处理数据的工具.在流中,定义了一些处理数据的基本操作,如读取数据,写入数据等,程序员是对流进行所有操作的, ...

  3. OC中文件的操作

    OC中文件操作,在之前的文章中,已经接触到了文件的创建了,但是那不是很具体和详细,这篇文章我们就来仔细看一下OC中是如何操作文件的: 第一.首先来看一下本身NSString类给我们提供了哪些可以操作文 ...

  4. loadrunner中文件的操作

    loadrunner中文件的操作 我们可以使用fopen().fscanf().fprintf().fclose()函数进行文件操作,但是因为LoadRunner不支持FILE数据类型,所以我们需要做 ...

  5. .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常)

    .NET客户端下载SQL Server数据库中文件流保存的大电子文件方法(不会报内存溢出异常) 前段时间项目使用一次性读去SQL Server中保存的电子文件的文件流然后返回给客户端保存下载电子文件, ...

  6. Perl中文件读取操作

    Perl中文件读取操作 http://blog.csdn.net/yangxuan12580/article/details/51506216

  7. C++中输入输出流及文件流操作笔记

    1.流的控制 iomanip          在使用格式化I/O时应包含此头文件.    stdiostream   用于混合使用C和C + +的I/O机制时,例如想将C程序转变为C++程序 2.类 ...

  8. c++ ofstream & ifstream文件流操作

    ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间; //ofstream & ifstream inherit from istream class ...

  9. c语言中文件相关操作

    一 .首先介绍一下数据文件的类型: 1.二进制文件(映像文件):在内存中以二进制形式存取. 2.文本文件(ascii文件):以ascii码形式存取的文件. 通俗的讲,在Mac下,你把一个文件丢进记事本 ...

随机推荐

  1. poj 2981 Strange Way to Express Integers (中国剩余定理不互质)

    http://poj.org/problem?id=2891 Strange Way to Express Integers Time Limit: 1000MS   Memory Limit: 13 ...

  2. PXE+Kickstart无人值守安装系统re

    PXE(Preboot Excute Environment)预启动执行环境,可以让计算机通过网络启动系统,主要用于无人值守安装系统中引导客户端主机安装Linux操作系统. 由于之前有过使用cobbl ...

  3. 「CodeChef - SKIRES」Ski Resort

    题目链接 戳我 \(Description\) 给你一个\(n*m\)的网格,以及网格上的两个格子\(A,B\).每个格子有一个高度.每次操作可以选择一个格子(不能是\(A\)或\(B\))并将它的高 ...

  4. RabbitMq初探——发布与订阅

    publish and subscribe 前言 前面的例子 我们都是用到的都是消息单一消费,即一条消息被单个消费者消费.像微博系统的消息推送,是一条消息推送给所有订阅到该频道的用户. 这里我们就需要 ...

  5. web思维导图(前期)

  6. docker启动时报错

    docker安装成功后,启动时报错. 1.后来排查后发现yum install docker安装的是从test存储库中安装的. 后来我指定了特定的版本后,而且从stable存储库安装的,以后再启动就好 ...

  7. LOJ#3085. 「GXOI / GZOI2019」特技飞行(KDtree+坐标系变换)

    题面 传送门 前置芝士 请确定您会曼哈顿距离和切比雪夫距离之间的转换,以及\(KDtree\)对切比雪夫距离的操作 题解 我们发现\(AB\)和\(C\)没有任何关系,所以关于\(C\)可以直接暴力数 ...

  8. kinect 2 for xbox畸变矫正

    kinect 2 for xbox畸变矫正 畸变校正的详细方法在iai_kinect2/kinect2_calibration的readme文件中. 由于通过kinect2获得的图像数据有不同的模式( ...

  9. C++中重载、覆盖和隐藏

    一,多态性 1,(1)声明了基类的指针,该指针指向基类,该指针永远调用自己的成员函数,不管函数是否为虚函数. (2)声明了派生类的指针,该指针指向该派生类,该指针永远调用自己的成员函数,不管函数是否为 ...

  10. ava Maven项目之Nexus私服搭建和版本管理应用

    目录: Nexus介绍 环境.软件准备 Nexus服务搭建 Java Maven项目版本管理应用 FAQ 1.Nexus介绍 Nexus是一个强大的Maven仓库管理器,它极大地简化了自己内部仓库的维 ...