C++ 考前复习 文件操作

1.文件操作

程序运行时产生的数据都是临时数据,一旦程序结束运行就会被释放我们可以通过文件操作将数据持久化保存。

文件的类型分为两种:

1.文本文档 :文件以文本的ASCII码形式存储在计算机中。

2.二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不能直接读懂。

在cpp中对文件操作要包含 #include <fstream>这个头文件,因为C++定义的文件的输入输出流类,在这个头文件里面声明。

文件操作的三大类

  1. ifstream   只读
  2. ofstream  只写
  3. fstream    读写

1.1文本文件

写操作

#include <iostream>
#include <fstream>
using namespace std;
int main() {
    ofstream ofs;   //先定义一个文件流对象
    ofs.open("text.txt", ios::out);
    //用open这个函数来打开这个文件,前面是你的路径
    //后面是你的打开方式,这个路径可以是绝对路径也可以是相对路径
    //或者可以这样写 第一步就给他定义好了
    //ofstream ofs("text.txt", ios::out);
    ofs << "你要写的数据" << endl;ofs.close();
    //然后关闭这个文件
}

下面是打开方式

ios::in             只读    
ios::out            只写    
ios::app            从文件末尾开始写,防止丢失文件中原来就有的内容    
ios::binary         二进制模式    
ios::nocreate       打开一个文件时,如果文件不存在,不创建文件    
ios::noreplace      打开一个文件时,如果文件不存在,创建该文件    
ios::trunc          打开一个文件,然后清空内容    
ios::ate            打开一个文件时,将位置移动到文件尾

读操作

#include <iostream>
#include <fstream>
using namespace std;
void writetext() {    
    ofstream ofs("text.txt",ios::out);
    if (!ofs) {
        cout << "open error!" << endl;
        exit(1);    
}
    ofs << "小明100200" << endl;
    ofs.close();}
void readtext() {
    ifstream ofs("text.txt", ios::in);
    if (!ofs) {
        cout << "open error!" << endl;
        exit(1);
    }
    char c = 0;
    while ((c = ofs.get()) != EOF) {
        cout << c;
    }
    ofs.close();
}
int main() {
    writetext();
    readtext();
}

1.这种方法是一个字节一个字节读的,跟C的fgetc()函数很像,你的char c相当一个缓存空间,先把他从文件中读出来在用cout输出到你的屏幕上

    char c = 0;
    while ((c = ofs.get()) != EOF) {
        cout << c;
    }

2.这中方法是一行一行读取的,跟C的fgets()函数很像,你的buf是一个缓存空间,一行一行读进去了,读到文本或者空行getline()的返回值一直是true,如果读取失败,那么会抛出相对应的异常,最后在输出在cout到你的屏幕上。

    char buf[1024] = { 0 };
while (ofs.getline(buf,sizeof(buf))){
 cout << buf << endl;
}

对于 getline的函数原型是这样的

4e37a0b8683e4014abccad771fde581d.png

第一个参数是你的缓存区的地址,第二个是你缓存区的的大小。

 他的返回值是这样的

watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAWEFUVeW8n-S4reS5i-W8nw==,size_19,color_FFFFFF,t_70,g_se,x_16

3. 这就是往缓存区里面放,读完就在while里面返回EOF(也就是-1,他已经给你处理好了#define EOF -1),在cout给你打在屏幕上。

    char buf[1024] = { 0 };while (ofs >> buf){ cout << buf << endl;}

1.2二进制文件

因为以二进制的方式对文件进行读写操作,所以打开方式要指定为 ios::binary和一个位或操作符结合。

写操作

#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void writetxt()
 {
    char buf[1024] = { 0 };
    ofstream ofs("f1.txt", ios::out | ios::binary);
    ofs << "你要写入的" << endl;
    ofs.write((const char*)buf, sizeof(buf));
    ofs.close();
}
void readtxt() 
{
    char buf[1024] = { 0 };
    ifstream ifs("f1.txt", ios::in | ios::binary);
    if (!ifs) {
    cout << "open error!" << endl;
}
    ifs.read((char*)buf, sizeof(buf));
    cout << buf << endl;
}
int main() {
    writetxt();
    readtxt();
    return 0;
}

这里主要用了write这个函数他的传参是这样的eb16de849978433e86be79def7ed854b.png

还是一个缓存空间,缓存空间的长度

 读操作就是加了一个read函数他的函数原型是这样的7aea591a06774f3c8f6bd6764327fad8.png

 传参跟write很像只是这块是char类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五毛变向.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值