【贪玩巴斯】c++核心编程,你需要敲出这些程序 !(八){C++文件读写 全解 详解!} //2021-05-15

//

//  main.cpp

//  _day8

//

//  Created by AchesonD16 贪玩巴斯 on 2021/5/12.

//

 

 

// 文件操作

 

一、文件操作基础知识

// 程序运行时产生的数据都属于临时数据,程序一旦运行结束都会被释放

 

//通过文件可以将数据持久化

//C++中对文件操作需要包含

头文件 <fstream>

 

//文件类型分为两种:

//1、文本文件 - 文件以文本的ASCII码形式存储在计算机中

//2、二进制文件 - 文件以文本的二进制形式存储在计算机中,用户一般不能够直接读懂它们

 

 

//操作文件的三大类:

//1、ofstream  写操作

//2、ifstream  读操作

//3、fstream   读写操作

 

 

二、文本文件——写文件

/*

文本文件

写文件

 

包含头文件

#include<fstream>

创建流对象

ofstream ofs;

打开文件

ofs.open("文件路径",打开方式);

写数据

ofs << "写入的数据";

关闭文件

ofs.close();

 

文件打开方式:

【贪玩巴斯】c++核心编程,你需要敲出这些程序 !(八){C++文件读写 全解 详解!} //2021-05-15

 

注意:

文件打开方式可以配合使用,利用 | 操作符

例如: 用二进制方式写文件 ios::binary | ios::out

 

 

#include<iostream>

#include<fstream>

using namespace std;

 

 

void test1()

{

    ofstream ofs;

    ofs.open("test.txt", ios::out);   // ”文件路径“如果没有加地址,那么会默认在这个C++程序的文件所在地

    

    ofs << "你好,世界!" << endl;

    ofs << "Hello World!" << endl;

    

    ofs.close();

}

 

int main()

{

    test1();

    

    system("pause");

    return 0;

}

 

 

总结:

文件操作必须包含头文件 fstream

读文件可以利用 ofstream, 或者 fstream类

打开文件时候需要指定操作文件的路径,以及打开方式

利用<<可以向文件中写数据

操作完毕,要关闭文件

*/

 

 

 

 

三、文本文件——读文件

/*

读文件

 

读文件与写文件步骤相似,但是读取方式相对于比较多

读文件步骤如下:

包含头文件

#include<fstream>

 

创建流对象

ifstream ifs;

 

打开文件并判断文件是否打开成功

ifs.open("文件路径", 打开方式);

 

读数据

四种方式读取

 

关闭文件

ifs.close();

*/

 

/*

#include<iostream>

#include<string>

#include<fstream>

using namespace std;

 

void test1()

{

    ifstream ifs;

    ifs.open("test.txt",ios::in);

    

    if( ! ifs.is_open() )   // ifs.is_open() 一个函数判断是否文件打开,返回值为bool型

    {

        cout << "文件打开失败" << endl;

        return;

    }

    

    //第一种方式

//    char buf[1024] = {0};

//    while( ifs >> buf)  // 右运算符 输入

//    {

//        cout << buf << endl;

//    }

//

    

    //第二种方式

//    char buf[1024] ={0};

//    while (ifs.getline(buf, sizeof(buf)))  

//ifs.getline为成员函数:获取一行; 第一个参数 char* 把数据放入这个地址中,第二个参数

//为读取的 长度 ,直接用  sizeof(buf)

//    {

//        cout << buf << endl;

//    }

//

    

    //第三种方式  放入c++ 字符串中,要去包含string头文件

//    string buf;

//    while(getline(ifs, buf))  //全局函数getline,第一个参数为基础的 输入流——ifs,。第二个参数为准备好的字符串buf

//    {

//        cout << buf << endl;

//    }

//

    

    //第四种方式 文件中所有数据一个一个读进char c里面

//    char c;

//    while( (c=ifs.get()) != EOF)  // get函数,每次就读一个字符 , 只要!=EOF 文件未end of file 就以一直读

//    {

//        cout << c;

//    }

    //不推荐太慢了

    

    

    

    

}

 

int main()

{

    test1();

    

    system("pause");

    return 0;

}

 

总结:

读文件可以利用ifstream,或者 fstream类

利用 is_open函数可以判断文件是否打开成功

close 关闭文件

*/

 

 

 

 

四、二进制文件基础

// 二进制文件

//以二进制的方式对文件进行读写操作

//打开方式要指定为  ios::binary

 

 

 

五、二进制文件——写文件

/*

写文件

二进制方式写文件主要利用流对象调用成员函数write

函数原型:

ostream& write(const char* buffer, int len);

参数解释:字符指针buffer指向内存中一段存储空间。len是读写的字节数

 

 

#include <fstream>

#include <string>

#include <iostream>

using namespace std;

 

class Person

{

public:

    char m_Name[64];

    int m_Age;

};

 

//二进制文件 写文件

void test1()

{

    //1、包含头文件

    

    //2、创建输出流对象

    ofstream ofs("person.txt", ios::out | ios::binary);

    

    //3、打开文件

    //ofs.open("person.txt", ios::out | ios::binary);

    Person p = {"张三", 18};

    

    //4、写文件

    ofs.write((const char*)&p, sizeof(p) );

    

    //5、关闭文件

    ofs.close();

    

}

 

int main()

{

    test1();

    

    system("pause");

    return 0;

}

总结:

文件输出流对象 可以通过write函数,以二进制方式写数据

*/

 

 

 

六、二进制文件——读文件

 

/*

读文件

二进制方式读文件主要利用流对象调用成员函数read

函数原型:

istream& read(char * buffer, int len);

参数解释:

字符指针buffer指向内存中一段存储空间。len是读写的字节数

*/

#include <iostream>

#include<fstream>

#include<string>

using namespace std;

 

class Person

{

public:

    char m_Name[64];

    int m_Age;

};

 

void test1()

{

    ifstream ifs("person.txt", ios::in | ios::binary);

    if( ! ifs.is_open())

    {

        cout << "文件打开失败" << endl;

    }

    

    Person p;

    ifs.read((char *)&p, sizeof(p));

    cout << "姓名:" << p.m_Name << " 年龄:" << p.m_Age << endl;

}

 

int main()

{

    test1();

    

    system("pause");

    return 0;

}

 

//总结:

//文件输入流对象 可以通过read函数,以二进制方式读数据

上一篇:文件操作之文本文件


下一篇:BUU-WEB-Ping Ping Ping