北大C++课后记录:文件读写的I/O流

这篇具有很好参考价值的文章主要介绍了北大C++课后记录:文件读写的I/O流。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

文件和平常用到的cincout流其实是一回事,可以将文件看作一个有限字符构成的顺序字符流,基于此,也可以像cincout读键盘数据那样对文件进行读写。


读写指针

  • 输入流的read指针
    北大C++课后记录:文件读写的I/O流,北大C++MOOC,c++,开发语言
  • 输出流的write指针
    北大C++课后记录:文件读写的I/O流,北大C++MOOC,c++,开发语言

注:这里的指针并不是普通的内存指针(*ptr),而是一种叫std::streampos类型的指针,是用于在文件流中定位文件位置的数据类型,可以类比成一个int型的数据。


文本文件读写demo

#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>
using namespace std;

int main(){
    vector<int> v;
    ifstream srcFile("testin.txt", ios :: in);
    ofstream destFile("testout.txt", ios :: out);
    int t;
    while(srcFile >> t)
        v.push_back(t);
    sort(v.begin(), v.end());
    for(auto i : v)
        destFile << i << ' ';

    //不执行close的话数据还在内存(的缓冲区)里没被磁盘读走
    srcFile.close();
    destFile.close();
    return 0;
}
//testin.txt: 9 84 23 15 56 2 34 123 5 1
//testout.txt: 1 2 5 9 15 23 34 56 84 123 

二进制文件读写demo1

北大C++课后记录:文件读写的I/O流,北大C++MOOC,c++,开发语言
北大C++课后记录:文件读写的I/O流,北大C++MOOC,c++,开发语言

#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>
using namespace std;

//写入一个整型数据后接着读出
int main(){
    ofstream fout("some.bat", ios::out | ios::binary);      //从文件头开始,以二进制的形式写入
    int x = 120;
    //从x的内存地址开始传入4字节数据
    //(const char*)强转是为了让编译器拿到(int*)指针后能将其解释成字符型数据
    fout.write((const char*) &x, sizeof(int));
    fout.close();
    int y;
    ifstream fin("some.bat", ios::in | ios::binary);//从文件头开始,以二进制的形式写入
    //从文件开头处取出4字节数据
    //然后将y地址转成(char*)从而在该地址后面放入4字节数据
    fin.read((char*) &y, sizeof(int));
    fin.close();
    cout << y << endl;
    return 0;
}

二进制文件读写demo2

  • 先写入三个对象的数据
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>
using namespace std;
struct Student{
    char name[20];
    int score;
};//24-Byte

int main(){
    Student s;
    ofstream OutFile("students.dat", ios::out|ios::binary);
    while(cin >> s.name >> s.score)
        OutFile.write((char*) &s, sizeof(s));
    OutFile.close();
    return 0;
}
//input:
//Tom 60
//Jack 80
//Jane 40
//^Z Enter
  • 读出并合理地显示内容
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>
using namespace std;
struct Student{
    char name[20];
    int score;
};//24-Byte

int main(){
    Student s;
    ifstream inFile("students.dat", ios::in|ios::binary);
    if(!inFile){        //空流
        cerr << "error" << endl;
        return 0;
    }
    while(inFile.read((char*) &s, sizeof(s))){
        int readBytes = inFile.gcount();	//本次读进来了多少字节数据
        cout << "readBytes: " << readBytes << endl;
        cout << s.name << " " << s.score << endl;
    }
    inFile.close();
    return 0;
}
//output:
//readBytes: 24
//Tom 60
//readBytes: 24
//Jack 80
//readBytes: 24
//Jane 40

二进制文件读写demo3文章来源地址https://www.toymoban.com/news/detail-731672.html

  • 用一个fstream流对象完成读和写的任务
#include <iostream>
#include <fstream>
#include <algorithm>
#include <cstring>
#include <string.h>
#include <vector>
using namespace std;
struct Student{
    char name[20];
    int score;
};//24-Byte
//Jane——>Mike
int main(){
    Student s;
    fstream iofile("students.dat", ios::in|ios::out|ios::binary);
    if(!iofile){
        cerr << "error" << endl;
        return 0;
    }
    iofile.seekp(2 * sizeof(s), ios::beg);      //从文件头开始将写指针移动两个对象大小的跨度——>到第三个对象的首字节
    //由于Mike和Jane同字符个数,所以写入Mike后'e'的后面已经是'\0'了,其实可以不“+1”让编译器来补终止符。
    iofile.write("Mike", strlen("Mike") + 1);       
    iofile.seekg(0, ios::beg);      //防止读指针随机指到其他地方
    while(iofile.read((char*) &s, sizeof(s))){
        int readBytes = iofile.gcount();
        cout << "readByte: " << readBytes << endl;
        cout << s.name << " " << s.score << endl;
    }
    iofile.close();
    return 0;
}
// output:
// readByte: 24
// Tom 60
// readByte: 24
// Jack 80
// readByte: 24
// Mike 40

总结

  • 文本模式和二进制模式的主要区别在于文本模式会执行一些与文本数据处理相关的特殊转换和处理(比如Windows下所有的'\r\n'会被解释成一个'\n'字符,从而造成数据读取泄漏),而二进制模式不会执行这些操作,二进制模式保留原数据。
  • 这里写入、读出时总利用char*作为参数的其中之一作用:是为了更好地观察、理解数据,否则其他数据类型打开在用户视角是一片乱码(可以用记事本打开dat文件验证)。

到了这里,关于北大C++课后记录:文件读写的I/O流的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C语言文件操作(文件读写)

    本文主要介绍C语言中文件操作的相关内容(例:文件读、写等相关函数)。 在对计算机的使用中我们几乎离不开文件。例如常见的有word 文档,txt文本文件,图片文件、音频文件等。 文件是以计算机硬盘为载体存储在计算机上的信息集合。是数据源的一种,最主要的作用是保

    2024年02月02日
    浏览(42)
  • C++文件读写类介绍

    一、现有的文件读写方案 该库 拥有输入输出模板类及两个标准实例化集:一个是用于操作char类型元素的实例化集(即常用的cin,cout等) ,另一个用于操作wchar_t类型元素的实例化集。 模板类以 basic_ 作为前缀,实例化的类去掉 basic_ ,例如 basic_ios 与 ios 。代码如下: QFile 针对

    2024年02月02日
    浏览(36)
  • C++ 读写Json文件

    目录 1.JSON简介  2.结构形式 2.1 键值形式  2.2键-数组形式 2.3 键-值(键-值)形式 3. C++实现  3.1 读取JSON文件 3.2 写入JSON文件 JSON文件无论是在web开发、客户端开发、服务端等开发中都是应用比较广泛的的第一种轻量级数据交换格式,非常方便阅读和编写。也是开发、测试、

    2024年02月14日
    浏览(34)
  • c++文件操作(2)-- 按照指定格式读写文件

    目录 按照指定格式写文件 代码说明:   按照指定格式读文件 -- 解析一定格式的字符串 代码说明:  注意:  问: 为什么使用getline()?   在实际开发中,我们以一定的格式写入文件当中。  其实就是使用stringstream类对象来实现。   代码说明:   大部分操作和写文件类似,只是

    2024年01月24日
    浏览(38)
  • C++——fstream文件读写操作

    文件类型 文本文件 - 文件以文本的 ASCII码 形式存储在计算机中 二进制文件 - 文件以文本的 二进制 形式存储在计算机中,用户一般不能直接读懂它们 操作文件类 ofstream:写操作 ifstream: 读操作 fstream : 读写操作 文件打开方式 打开方式 解释 ios::in 为读文件而打开文件 ios

    2024年01月24日
    浏览(40)
  • 读写ini配置文件(C++)

    文章转载于:https://blog.csdn.net/weixin_44517656/article/details/109014236 如果我们程序没有任何配置文件时,这样的程序对外是全封闭的,一旦程序需要修改一些参数必须要修改程序代码本身并重新编译,这样很不好,所以要用配置文件,让程序发布后还能根据需要进行必要的配置;

    2024年02月08日
    浏览(61)
  • C语言——文件操作(2)文件的读写操作

            之前,我讲解了文件的基本情况与读写模式,看到这篇博客的小伙伴们先参考这篇博客:  C语言——文件操作详解(1)_         接下来,我会继续讲解文件操作的第二大步:文件读/写操作。 目录         A.文件的顺序读写         一.字符输入输出函数 

    2024年02月09日
    浏览(39)
  • C语言文件的读写操作

    目录 一,文件 1.文本模式,二进制模式 2.标准文件 二,文件的打开和关闭 1.文件指针 1.1文件的打开  1.2文件的关闭 三,文件的顺序读写  1.fgetc 2.fputc 3.fgets 4.fputs 5.fprintf 6.fscanf 7.fwrite 8.fread  9.表格 四,文件的随机读写 1,fseek   2,ftell 3,rewind 判断文件结束 1,feof 2,判断

    2024年02月10日
    浏览(41)
  • C语言中文件的读写

    不争输赢,只问对错 文章目录 一、文件的概述   二、什么是读写文件 三、文件处理的函数 1.文件的打开与关闭 2.文件的顺序读写 文件的顺序读写相关函数 scanf 和 printf 家族的对比及其区分 3.文件的随机读写       文件的随机读写函数 四、文件缓冲区 五、文件的读取结束

    2024年02月14日
    浏览(33)
  • C语言文件打开关闭详解、文件顺序读写详解。

    fopen 函数原型: const char *filename 文件的路径以及名字 const char *mode 文件的打开方式 文件打开方式 含义 如果文件不存在 “r” 读 文件不存在会报错 “w” 写(清空写) 建立一个新的文件 “a” 写(追加写) 建立一个新的文件 “r+” 读写 文件不存在会报错 “w+” 读写(清空写) 建

    2024年02月10日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包