C++之IO流

编程入门 行业动态 更新时间:2024-10-21 19:30:37

C++之<a href=https://www.elefans.com/category/jswz/34/1771407.html style=IO流"/>

C++之IO流

IO

  1. 流的概念
  2. fstream的使用

流的概念

什么是流?

1)、流是一种抽象概念,表示了数据的无结构化传递。
2)、C++流是指信息从外部输入设备(如键盘)向计算机内部(如内存)输入和从内存向外部输出设备(显示器)输出的过程。
3)、C++定义了I/O标准类库,用以完成流操作的功能

I/O流

I/O流:输入/输出流
1)、按数据的流向划分:
输入流:数据从键盘流入计算机内部
输出流:数据从内存流向外部输出设备
2)、按处理的单位划分
字节流:读取二进制数据,数据不会经过任何处理
字符流:读取的数据是以字符为单位的。

流类库中常见类

1)、istream:通用输入流类
2)、ostream:通用输出流类
3)、iostream:通用输入/输出流类
4)、ifstream:文件输入流类
5)、ofstream:文件输出流类
6)、fstream:文件输入/输出流类

fstream的使用

fstream的作用

fstream是C++中常用的文件操作类,用于把内存数据写入硬盘文件,或者从硬盘文件把数据读进内存。

C++文件操作

1)、包含头文件,并打开命名空间std
2)、直接使用fstream类来进行对象的实例
fstream myFile;
3)、通过类中成员函数进行文件的各项操作

注意:文件操作时,数据按怎样的顺序写入文件,在读操作时就必须按该顺序读取文件中数据。
fstream类中常见成员函数

open函数
使用open来打开文件,实现类与文件的关联操作。
必须先打开文件才能进行后续的文件内的操作

示例:
myFile.open(“路径文件名”,”打开方式”);
路径文件名:可以是绝对路径,也可以是相对路径
打开方式:表示打开文件的模式,不同的模式对应不同的数据操作

打开方式可以是一种模式或者多种模式的组合,用| 运算符来组合。
如:
ios::in|ios::binary
表示用打开文件进行数据的读取,且用二进制模式进行数据操作

close函数

使用close来关闭文件,文件重新变为可访问,对象也可以打开其他文件。
必须要使用close关闭文件
示例:
myFile.close();

s_open函数

判断文件是否打开成功,如果打开成功返回1,失败返回0。
示例:
myFile.is_open();

eof函数

判断文件是否到达文件末尾,到达则返回true。
示例:
myFile.eof();

put函数

朝文件写入一个字符。
示例:
myFile.put(‘x’);
char sex = ‘w’;
myFile.put(sex);

get函数

从文件中读取字符。
有3种常用的重载形式
ifstream &get(char &ch);

示例:
char x;
myFile.get(x);//从流中读取一个字符,结果保存在x中
int get();
示例:
char x;
x = myFile.get();//从流中读取一个字符,把结果返回出来,赋值给x

有3种常用的重载形式
ifstream &get(char *buf,int num,char delim = ‘\n’);
示例:
char testStr[1024];
myFile.get(testStr,1023);//把字符读入testStr指向的数组,直到读入1023
个字符或遇到缺省换行符’\n’时终止,在testStr尾部加0终结符。
myFile.get(testStr,1023,‘A’);//把字符读入testStr指向的数组,当遇到字
符’A’或读取了1023个字符时终止,在testStr尾部加0终结符。

getline函数

从文件中读取一行字符,和get第3种方式类似。

ifstream &getline(char *buf,int num,char delim = ‘\n’);
示例:
char testStr[1024];
myFile.getline(testStr,1023);//把字符读入testStr指向的数组,直到读入
1023个字符或遇到缺省换行符’\n’时终止,在testStr尾部加0终结符。
myFile.getline(testStr,1023,‘A’);//把字符读入testStr指向的数组,当遇
到字符’A’或读取了1023个字符时终止,在testStr尾部加0终结符。

get和getline的区别:都可以读多个字符,get会把文件内遇到终结符留在输入
流中,所以需要使用get将终结符扔掉。getline自动把输入流中的终结符取消掉了,
下次可以继续直接读取。读一行字符时,一般使用getline。

seekp或seekg函数

从文件内流指针位置。

示例:
myFile.seekp(5,ios::beg);//从文件开头处向后偏移5个字符。

第二个参数有三种:
ios::beg 表示文件开头
ios::end 表示文件结尾
ios::cur 表示文件当前位置

使用重载的”<< ”或者”>> ”

类似于I/O流中的cin和cout,只不过cin和cout是作用在内存,而fstream是作
用在文件。

示例:
写入文件:
myFile << “输入输出,明天就秃” << endl;
myFile << x << endl;//x是一个定义好的变量

从文件读出:
myFile >> str >> x;//str是一个足够大的字符数组,x是定义好的一个变量

二进制形式的读写文件

myFile.read(const char* s,int num);
第1个参数表示:指向操作对象的首地址
第2个参数表示:操作对象的内存大小
write参照read

示例:
写入文件:
int level = 3;
myFile.write((char *)&level,sizeof(level));
从文件读出:
int npcLevel;
myFile.read((char *)&npcLevel,sizeof(npcLevel));

练习代码

#define _crt_secure_no_warnings
#include<iostream>
#include<fstream>
using namespace std;
int main()
{fstream file;组合方式, 文件最好存在eof函数,判断文件指针是否达到文件末尾, 到达返回trueput函数, 向文件写入一个字符file.open("./file/1.txt", ios::out|ios::in);if (file.is_open()){cout << "打开成功" << endl;}else{cout << "打开失败" << endl;}string str = "yesir";for (auto e : str){file.put(e);}char str[1024] = { 0 };int i = 0;while (!file.eof()){file.get(str[i++]);//str[i++] = file. get(); 返回的是强转成10进制的ascii码}file.get(str, 1023); //读一行,最多读1023, 最后一个留给\0cout << str << endl;file.get(str, 1023, 'c');//读到c结束, 不包含ccout << str << endl;file.getline(str, 1023);cout << str << endl;file.seekg(0, ios::end);int size = file.tellg();//获取文件指针的偏移量cout << size << endl;file.close();fstream file1,file2;file1.open("./file/2.txt", ios::in|ios::out);file2.open("./file/3.txt", ios::in|ios::out);char str[1024] = { 0 };int i = 0;while (!file1.eof()){file1.get(str[i++]);}str[i++] = '\n';while (!file2.eof()){file2.get(str[i++]);}file1.getline(str, 1023);file2.getline(str, 1023);cout << str << endl;file1.close();file2.close();system("pause");return 0;
}

更多推荐

C++之IO流

本文发布于:2024-02-27 05:48:50,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1705410.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:IO

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!