美文网首页
黑马C++视频笔记《文件读写》

黑马C++视频笔记《文件读写》

作者: 井底蛙蛙呱呱呱 | 来源:发表于2021-01-10 00:07 被阅读0次
//
// Created by shexuan on 2021/1/9.
//

#include <iostream>
#include <string>
using namespace std;

#include <fstream>


/* 文件操作
 * 程序运行时产生的数据都属于临时数据,程序一旦运行结束就会被释放,通过文件可以将数据持久化。
 *
 * C++中对文件操作需要包含头文件<fstream>
 *
 * 文件分为两种类型:
 *  (1)文本文件:数据以文本的ASCII码形式储存在计算机中;
 *  (2)二进制文件:数据以文本的二进制形式储存在计算机中,用户一般不能直接读懂他们。
 *
 * 操作文本的三大类:
 *  (1)ofstream:写操作;
 *  (2)ifstream:读操作;
 *  (3)fstream:读写操作。
 *
 *
 * 写文件步骤:
 *  (1)包含头文件。`#include <fstream>`
 *  (2)创建流对象。`ofstream ofs`
 *  (3)打开文件。`ofs.open("文件路径",打开方式)`
 *      打开方式: ios::in      为读文件而打开文件;
 *               ios::out     为写文件而打开文件;
 *               ios:ate      初始位置:文件尾;
 *               ios:app      追加方式写文件;
 *               ios::trunc   如果文件存在,先删除再创建
 *               ios::binary  二进制方式
 *      注:文件打开方式可以配合使用,利用|操作符。
 *      例如:用二进制方式写文件ios::out|ios::binary。
 *  (4)写数据。`ofs<<"写入的数据"`
 *  (5)关闭文件。`ofs.close()`
 
 * 小结:
 *  (1)文件操作必须包含头文件fstream;
 *  (2)读文件可以利用ofstream,或者fstream;
 *  (3)打开文件时需要指定操作文件的路径,以及打开方式;
 *  (4)利用<<可以向文件中写数据;
 *  (5)操作完毕,要关闭文件。
 *
 *
 * 读文件步骤
 * 读文件与写文件步骤类似,只是读取方式较多
 *  (1)包含头文件。`#include <fstream>`
 *  (2)创建流对象。`ifstream ifs`
 *  (3)打开文件并判断是否打开成功。`ifs.open("文件路径",打开方式)`
 *  (4)读数据;
 *  (5)关闭文件。`ifs.close();`
 *
 *
 * 二进制文件
 * 以二进制的方式对文件进行读写操作,打开方式要指定ios::binary
 *
 * 写文件:二进制方式写文件主要利用流对象调用成员函数write.
 * 函数原型:ostream& write(const char * buffer, int len);
 * 参数解释:字符指针buffer指向内存中一段储存空间,len是读写的字节数。
 *
 * 读二进制文件
 * 二进制文件读取主要利用流对象调用成员函数read.
 * 函数原型:istream& read(char *buffer, int len);
 * 参数解释:字符指针buffer指向内存中一段储存空间。len是读写的字节数。
 * 
 */
 
 *
/* 其他笔记:
 * ifs是ifstream类对象(从istream类派生出来的类似于cin),所有的输入流对象功能都类似,
 * cin>>在读取的时候默认以空格、tab,换行为分隔符,ifs>>也一样。
 *
 * 逐词读取:while(ifs >> buf) 遇到空格、换行或文件尾结束一次读取,即一次读取连续的内容。
 *
 */

栗子

void test_write(){
    //1、包含头文件fstream
    //2、创建流对象
    ofstream ofs;

    //3、指定打开方式
    ofs.open("test.txt", ios::out);

    //4、写内容
    ofs << "姓名:张三" << endl;
    ofs << "性别:男" << endl;
    ofs << "年龄:18" << endl;

    //5、关闭文件
    ofs.close();
}

void test_read(){
    //1、包含头文件
    //2、创建流对象
    ifstream ifs;

    //3、打开文件,并且判断是否打开成功
    ifs.open("test.txt", ios::in);

    if (!ifs.is_open()){
        cout << "文件打开失败" << endl;
        return;
    }

    //4、读数据
    //第一种
//    char buf[1024] = {0};
//    while (ifs>>buf){
//        cout << buf << endl;
//    }

    // 第二种
//    char buf2[1024] = {0};
//    while (ifs.getline(buf2, sizeof(buf2))){
//        cout <<buf2 << endl;
//    }

//    // 第三种
//    string buf3;
//    while (getline(ifs, buf3)){
//        cout << buf3 << endl;
//    }
    //第四种
    char c;
    while ((c=ifs.get())!=EOF){
        cout << c;
    }
}

class Person{
public:
    char m_name[64];
    int m_age;
};

void test_write_binary(){
    //1、包含头文件
    //2、创建输出流对象
    // ofstream ofs("person.txt", ios::out|ios::binary);
    ofstream ofs;

    //3、打开文件
    ofs.open("person.txt", ios::out|ios::binary);

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

    //4、写文件
    ofs.write((const char *)&p, sizeof(p));

    //5、关闭文件
    ofs.close();
}

void test_read_binary(){
    //1、包含头文件
    //2、创建输出流对象
    ifstream ifs;

    //3、打开文件
    ifs.open("person.txt", ios::in|ios::binary);

    if (!ifs.is_open()){
        cout << "文件打开失败" << endl;
        return;
    }

    //4、读文件
    Person p;

    ifs.read((char *)&p, sizeof(p));
    cout << "姓名:" << p.m_name << "年龄:" << p.m_age << endl;

    //5、关闭文件
    ifs.close();
}


int mainfile(){
    //test_write();
    //test_read();
    //test_write_binary();
    test_read_binary();
}

相关文章

网友评论

      本文标题:黑马C++视频笔记《文件读写》

      本文链接:https://www.haomeiwen.com/subject/yiacaktx.html