C++中读写文件方法(fstream用法)

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


前言

日常工作中肯定会用到文件读写操作,C++ STL中 fstream 是一种用于文件读写的流类,它可以方便地对文件进行输入输出操作。本文将详细介绍C++ fstream的使用方法,以及各种常用的函数方法和参数。


一、 打开文件方法

首先,要使用C++ fstream,需要包含头文件,然后创建一个fstream对象,指定要打开的文件名和打开模式。打开模式可以是以下几种:

  • ios::in:以输入模式打开文件,只能进行读操作。
  • ios::out:以输出模式打开文件,只能进行写操作。如果文件不存在,则创建一个新文件;如果文件已存在,则覆盖原有内容。
  • ios::app:以追加模式打开文件,只能进行写操作。如果文件不存在,则创建一个新文件;如果文件已存在,则在原有内容的末尾追加新内容。
  • ios::ate:以定位模式打开文件,可以进行读写操作。如果文件不存在,则创建一个新文件;如果文件已存在,则将文件指针定位到文件末尾。
  • ios::binary:以二进制模式打开文件,可以进行读写操作。这个模式会忽略换行符等特殊字符,按照字节流的方式处理文件。
  • ios::trunc:以截断模式打开文件,只能进行写操作。如果文件不存在,则创建一个新文件;如果文件已存在,则删除原有内容。

以上模式可以用“|”符号组合使用,例如ios::in | ios::binary表示以输入二进制模式打开文件。

例如,以下代码创建了一个fstream对象fs,并以输出追加模式打开了一个名为test.txt的文件:

#include <fstream>
using namespace std;

int main()
{
	fstream fs;
	fs.open("test.txt", ios::out | ios::app);
	// 尾部追加的写操作
	fs.close();
	return 0;
}

注意,在使用完fstream对象后,需要调用close()函数关闭文件,释放资源。

二、读写方法

在打开文件后,可以使用各种流操作符和函数对文件进行读写操作。例如:

  • <<:向文件写入数据,例如fs << “Hello, world!” << endl;表示向文件写入一行字符串。
  • >>:从文件读取数据,例如fs >> x;表示从文件读取一个整数赋值给变量x。
  • getline():从文件读取一行字符串,例如getline(fs, s);表示从文件读取一行字符串赋值给变量s。

另外,还有一些常用的成员函数和标志位可以用来判断和控制fstream对象的状态。例如:

  • is_open():判断是否成功打开了文件,例如if (fs.is_open())表示如果成功打开了文件,则执行后续操作。
  • good():判断是否正常运行,没有发生错误或到达末尾,例如while (fs.good())表示当正常运行时,则循环执行后续操作。
  • eof():判断是否到达了文件末尾,例如while (!fs.eof())表示当没有到达末尾时,则循环执行后续操作。
  • fail():判断是否发生了非致命性错误(如类型不匹配),例如if (fs.fail())表示如果发生了非致命性错误,则执行后续操作。
  • bad():判断是否发生了致命性错误(如磁盘损坏),例如if (fs.bad())表示如果发生了致命性错误,则执行后续操作。
  • clear():清除错误标志位,恢复正常状态,例如fs.clear();表示清除错误标志位。
  • setstate():设置错误标志位为指定状态,例如fs.setstate(ios::failbit);表示设置错误标志位为非致命性错误状态。

三、读写文本示例

1、文本文件操作示例:

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

int main()
{
    // 创建一个fstream对象,用于读写文件
    fstream file;

    // 以读写模式打开一个文本文件,如果不存在则创建
    file.open("text.txt", ios::in | ios::out | ios::trunc);

    // 判断文件是否打开成功
    if (!file.is_open())
    {
        cout << "打开文件失败" << endl;
        return -1;
    }

    // 向文件中写入一些内容
    file << "Hello, world!" << endl;
    file << "This is a text file." << endl;

    // 将文件指针移动到文件开头
    file.seekg(0, ios::beg);

    // 从文件中读取内容,并显示到屏幕上
    string line;
    while (getline(file, line))
    {
        cout << line << endl;
    }

    // 关闭文件
    file.close();
    return 0;
}

2、二进制文件读写示例:

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

int main()
{
    // 创建一个fstream对象,用于读写文件
    fstream file;
    // 以读写模式打开一个二进制文件,如果不存在则创建
    file.open("binary.bin", ios::in | ios::out | ios::binary | ios::trunc);

    // 判断文件是否打开成功
    if (!file.is_open())
    {
        cout << "打开文件失败" << endl;
        return -1;
    }

    // 向文件中写入一个整数和一个浮点数
    int a = 123;
    double b = 3.14;
    file.write((char *)&a, sizeof(a));
    file.write((char *)&b, sizeof(b));

    // 将文件指针移动到文件开头
    file.seekg(0, ios::beg);

    // 从文件中读取一个整数和一个浮点数,并显示到屏幕上
    int c;
    double d;
    file.read((char *)&c, sizeof(c));
    file.read((char *)&d, sizeof(d));
    cout << c << endl;
    cout << d << endl;

    // 关闭文件
    file.close();

    return 0;
}

代码解释:

  • close函数不需要参数,用于关闭已经打开的文件。

  • fstream有两个成员函数:write和read,分别用于向二进制文件中写入和读取数据。

  • write函数需要两个参数:一个是要写入的数据的地址,一个是要写入的数据的字节数。例如write((char *)&a, sizeof(a))表示将变量a的值写入到二进制文件中,需要将a的地址转换为char型指针,并用sizeof函数获取a的字节数。

  • read函数也需要两个参数:一个是要存放读取的数据的地址,一个是要读取的数据的字节数。例如read((char *)&c, sizeof©)表示从二进制文件中读取一个整数,并存放到变量c中,需要将c的地址转换为char型指针,并用sizeof函数获取c的字节数。

  • fstream有两个成员函数:seekg和seekp,分别用于移动输入(读)和输出(写)的文件指针。这两个函数都需要两个参数:一个是要移动的偏移量(字节数),一个是参考位置。参考位置可以是以下几种:
    ios::beg:从文件开头开始计算偏移量。
    ios::cur:从当前位置开始计算偏移量。
    ios::end:从文件末尾开始计算偏移量。
    例如seekg(0, ios::beg)表示将输入指针移动到文件开头,seekp(-1, ios::end)表示将输出指针移动到倒数第二个字节处。

  • fstream有两个重载的运算符:<<和>>,分别用于向文本文件中写入和读取数据。这两个运算符可以接受各种基本类型的数据,例如int、double、string等,并自动进行格式转换。例如file << "Hello, world!“表示向文本文件中写入字符串"Hello, world!”,file >> a表示从文本文件中读取一个整数,并存放到变量a中。

  • 特别说明:flush() 方法用于将任何缓冲输出写入文件。 它用于清除缓冲区并将缓冲区中的任何剩余数据写入文件。 当您想要确保在关闭文件之前已将所有数据写入文件时,此方法非常有用。

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

int main () {
  ofstream myfile;
  myfile.open ("example.txt");
  myfile << "Writing this to a file.\n";
  // ...当然通常我们会在循环中这么写
  myfile.flush();
  myfile.close();
  return 0;
}
  • ofstream myfile 相当于 fstream 的 ios::out。ofstream 是 fstream 的一种特殊类型,它只用于写入文件。当您使用 ofstream 打开文件时,它会自动将文件模式设置为 ios::out。这意味着您只能写入文件,而不能读取文件。

  • 同样的,ifstream 是 fstream 的另一种特殊类型,它只用于读取文件。当您使用 ifstream 打开文件时,它会自动将文件模式设置为 ios::in。这意味着您只能读取文件,而不能写入文件。


总结

以上就是C++ fstream的基本使用方法和常用函数和参数的介绍。希望本文能够对你有所帮助。文章来源地址https://www.toymoban.com/news/detail-606389.html

到了这里,关于C++中读写文件方法(fstream用法)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • c++文件操作 (1) -- 读写文件

    目录 为什么使用文件操作 文件输入流和输出流 -- 相对于内存而言 文件操作  1. 文件操作常用类以及头文件 2. 文件输入流(写文件操作)  1. 写文本文件  1)文件操作是使用对象来实现的  2)文件输出  3)打开文件  open函数 : 2. 读文本文件  3. 写二进制文件   4. 读二进制

    2024年01月25日
    浏览(35)
  • C++文件读写类介绍

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

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

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

    2024年02月14日
    浏览(27)
  • 读写ini配置文件(C++)

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

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

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

    2024年01月24日
    浏览(26)
  • C++——字符串、读写文件、结构体、枚举

    个人简介 👀 个人主页: 前端杂货铺 🙋‍♂️ 学习方向: 主攻前端方向,正逐渐往全干发展 📃 个人状态: 研发工程师,现效力于中国工业软件事业 🚀 人生格言: 积跬步至千里,积小流成江海 🥇 推荐学习:🍍前端面试宝典 🍉Vue2 🍋Vue3 🍓Vue2/3项目实战 🥝Node.js🍒

    2024年04月12日
    浏览(28)
  • 北大C++课后记录:文件读写的I/O流

    文件和平常用到的 cin 、 cout 流其实是一回事,可以将文件看作一个 有限字符构成的顺序字符流 ,基于此,也可以像 cin 、 cout 读键盘数据那样对文件进行读写。 读写指针 输入流的 read 指针 输出流的 write 指针 注:这里的指针并不是普通的内存指针( *ptr ),而是一种叫

    2024年02月07日
    浏览(22)
  • C++读写excel文件的的第三方库

    用于读取、写入、创建和修改 Microsoft Excel® (.xlsx) 文件的 C++ 库。 xlnt 是一个现代 C++ 库,用于操作内存中的电子表格以及从 XLSX 文件读取/写入它们,如ECMA 376 第 4 版中所述。xlnt 1.0 版的首次公开发布是在 2017 年 5 月 10 日。目前的工作重点是增加兼容性、提高性能以及集思广

    2024年02月05日
    浏览(40)
  • c++文件的打开、读写和关闭。缓冲区的使用和控制。

    在C++中,文件的打开、读写和关闭通常使用标准库中的文件流对象(如std::ifstream用于输入文件,std::ofstream用于输出文件)来完成。这些对象封装了与操作系统交互的底层细节,使得文件操作更为简单和安全。 以下是文件打开、读写和关闭的基本步骤: 包含头文件 首先,需

    2024年02月21日
    浏览(30)
  • 编译xlnt开源库源码,在linux平台使用c++读写excel文件

    里面又编译说明手册 获取到xlnt-master.zip 获取到libstudxml-master.zip 1 解压xlnt-master.zip,解压命令:unzip xlnt-master.zip 2 解压libstudxml-master.zip,解压命令:unzip libstudxml-master.zip 3 将libstudxml-master/libstudxml拷贝到xlnt-master/third-party/libstudxml 注意:是这个xlnt-master/third-party/libstudxml目录下,

    2024年04月25日
    浏览(24)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包