返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C++中fstream
  • 517
分享到

C++中fstream

c++iosobjective-c 2023-09-17 18:09:45 517人浏览 薄情痞子
摘要

#include 头文件fstream包含了ifstream、ofstream、fstream三个类,可以通过定义这三个类的对象来实现相对应的文件操作。 #include ofstream //文件写操作,内存写入存储设备if

#include

头文件fstream包含了ifstream、ofstream、fstream三个类,可以通过定义这三个类的对象来实现相对应的文件操作。

#include ofstream     //文件写操作,内存写入存储设备ifstream     //文件读操作,存储设备读取到内存中fstream      //读写操作,对打开的文件可进行读写操作

1.打开文件

  • 函数 open()
public member function void open ( const char * filename,            iOS_base::openmode mode = ios_base::in | ios_base::out ); void open(const wchar_t *_Filename,        ios_base::openmode mode= ios_base::in | ios_base::out,        int prot = ios_base::_Openprot); 
参数filenamemodeprot
含义操作文件名打开文件方式打开文件属性(应用少)
  • 打开文件的方式在ios类(所有流式I/O的基类)中定义,有如下几种方式:
ios::in为输入(读)而打开文件
ios::out为输出(写)而打开文件
ios::ate初始位置:文件尾
ios::app所有输出附加在文件末尾
ios::trunc如果文件已存在先删除文件
ios::binary二进制方式
  • 打开文件的方式可以单一使用或者利用“|”组合使用,例如:
ofstream outfile;outfile.open("Hello.txt",ios::in|ios::out|ios::binary)
  • 打开文件的属性在ios类中也有定义:
0普通文件,打开文件
1只读文件
2隐含文件
3系统文件

对于文件的属性也可以利用“|”和“+”进行组合使用

  • 如果只是使用默认的打开方式可以不用显式的调用open()函数,直接使用流对象进行文件的操作,如:
ofstream out("\\\",ios::out);ifstream in("\\\",ios::in);fstream fil("\\\",ios::in|ios::out);

当使用默认的方式对文件进行打开时,可以使用成员函数is_open()对文件进行是否已打开的验证。

2.关闭文件

  • 函数close()
    对文件进行完读写操作之后,必须将文件关闭使得文件重新变成可以访问的。close()函数负责将缓存中的数据排放出来并关闭文件。关闭的只是流对象所打开的文件,仍然可以利用流对象去打开别的文件。

3.文本文件的读写

文本文件的读写可以如同类与控制台交互一样利用"<<”和">>"分别进行写和读,如:

#includeint main(){    ofstream file("out.txt");    if(file.is_open())    {        file<<"This is a test"<
#include #include using namespace std;int main(){  char buff[256];  ifstream infile("in.txt");  if(!infile.is_open())      cout<<"Error open"<

状态标志符的验证

有一些验证流的状态的成员函数(所有都返回bool型返回值):

  • bad()
    如果在读写过程中出错,返回true.
  • fail()
    除了与bad()同样的情况下返回true外,加上格式错误时也返回true,例如当想要读入一个整数 ,而得到一个字母。
  • eof()
    如果读文件到达文件的末尾,返回true。
  • Good()
    最通用的验证:如果遇上以上任何一个函数返回true的话,此函数返回false。
  • clear()
    重置以上成员函数所检查的状态标志,没有参数。

获得和设置流指针

所有输入/输出流对象都有至少一个流指针:

  • ifstream,类似istream,有一个被称为get pointer的指针,指向下一个将被读取的元素。
  • ofsream,类似ostream,有一个被称为put pointer的指针,指向下一个元素的位置。
  • fstream,类似iostream,同时继承了 get 和 put 。

可以使用以下成员函数来读取或配置流指针:

  • tellg()和tellp()
    这两个函数不用传入参数,返回pos_type类型的值,即一个整数,代表当前get流指针的位置(用tellg)或put流指针的位置(用tellp)。
  • seekg()和seekp()
    这对函数分别用来改变指针get和put的位置。两个函数都被重载为两种不同的原型:
seekg(pos_type position);seekp(pos_type position);

使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。要求传入的参数类型与函数 tellg 和tellp 的返回值类型相同。

seekg ( off_type offset, seekdir direction );seekp ( off_type offset, seekdir direction );

使用这个原型可以指定由参数direction决定的一个具体的指针开始计算的一个位移(offset)。它可以是:

ios::beg从流开始位置计算的位移
ios::cur从流指针当前位置开始计算的位移
ios::end从流末尾处开始计算的位移

流指针 get 和 put 的值对文本文件(text file)和二进制文件(binary file)的计算方法都是不同的,因为文本模式的文件中某些特殊字符可能被修改。由于这个原因,建议对以文本文件模式打开的文件总是使用seekg 和 seekp的第一种原型,而且不要对tellg 或 tellp 的返回值进行修改。对二进制文件,你可以任意使用这些函数,应该不会有任何意外的行为产生。

 // obtaining file size    #include     #include         const char * filename = "test.txt";        int main () {        long l,m;        ifstream in(filename, ios::in|ios::binary);        l = in.tellg();        in.seekg (0, ios::end);        m = in.tellg();        in.close();        cout << "size of " << filename;        cout << " is " << (m-l) << " bytes.\n";        return 0;    }                     //`获取二进制文件的大小

4.二进制文件

在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。

文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read。第一个函数 (write) 是ostream 的一个成员函数,都是被ofstream所继承。而read 是istream 的一个成员函数,被ifstream 所继承。类 fstream 的对象同时拥有这两个函数。它们的原型是:

write ( char * buffer, streamsize size );read ( char * buffer, streamsize size );

这里 buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。

// reading binary file    #include     #include         const char * filename = "test.txt";        int main () {        char * buffer;        long size;        ifstream in (filename, ios::in|ios::binary|ios::ate);        size = in.tellg();        in.seekg (0, ios::beg);        buffer = new char [size];        in.read (buffer, size);        in.close();                cout << "the complete file is in a buffer";                delete[] buffer;        return 0;    }    //运行结果:    The complete file is in a buffer

来源地址:https://blog.csdn.net/m0_72572822/article/details/126561153

--结束END--

本文标题: C++中fstream

本文链接: https://lsjlt.com/news/411276.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • C++中fstream
    #include 头文件fstream包含了ifstream、ofstream、fstream三个类,可以通过定义这三个类的对象来实现相对应的文件操作。 #include ofstream //文件写操作,内存写入存储设备if...
    99+
    2023-09-17
    c++ ios objective-c
  • c++ fstream中seekg()和seekp()的用法
    在C++的fstream库中,seekg()和seekp()是用来移动文件指针的函数。它们分别用于对输入流和输出流进行定位。seek...
    99+
    2023-09-12
    c++
  • C++IO流之fstream, stringstream使用小结
    目录IO流1. C语言IO2. C++IO2.1 C++标准IO流2.2 C++文件IO流2.3 C++ stringstreamIO流 1. C语言IO C语言中常用的输入输出函数...
    99+
    2024-04-02
  • C++流操作之fstream用法介绍
    在Windows平台对文件进行存取操作可选的方案有很多,如果采用纯C,则需要用到File*等,当然也可以直接调用Windows API来做;如果采用C++,首先想到的就是文件流fst...
    99+
    2022-11-15
    C++ 流操作 fstream
  • C++中利用cout和fstream采用非科学计数法输出
    目录C++ cout和fstream采用非科学计数法输出C++ 输出不使用科学计数法C++ cout和fstream采用非科学计数法输出 1.cout非科学计数法输出 cout.se...
    99+
    2022-11-13
    C++ cout C++ fstream 非科学计数法输出
  • C/C++中gtest怎么用
    这篇文章主要介绍了C/C++中gtest怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Google C++ Testing Framework(简称gtest,http...
    99+
    2023-06-17
  • C++/C中#define怎么使用
    本篇内容介绍了“C++/C中#define怎么使用”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1 缩减代码 第一种用法与type...
    99+
    2023-07-02
  • c和c++中static的区别
    static 在 c 和 c++ 中的区别包括:作用域:c 中仅限于文件,c++ 可为文件或类作用域;链接:c 中仅链接到所在文件,c++ 中链接到整个程序;初始化:c 中默认为 0,c...
    99+
    2024-05-14
    c++ 作用域
  • C/C++中怎么用Lua函数
    本篇内容介绍了“C/C++中怎么用Lua函数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1.简介偶们这次...
    99+
    2024-04-02
  • C++中怎么调用C接口
    本篇文章为大家展示了C++中怎么调用C接口,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。C++如何调用C接口首先提供一个C接口:#include"test.h" voi...
    99+
    2023-06-16
  • C/C++中的#define怎么使用
    这篇文章主要介绍“C/C++中的#define怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“C/C++中的#define怎么使用”文章能帮助大家解决问题。1.数值类型输出易读的字符串形式例如...
    99+
    2023-07-05
  • C/C++中typedef的用法大全
    目录一、为基本数据类型起别名二、为结构体起别名三、为指针类型起别名四、为函数指针类型起别名五、为数组类型起别名六、为枚举类型起别名七、为模版函数起别名一、为基本数据类型起别名 typ...
    99+
    2023-05-17
    C++ typedef用法 C++ typedef
  • C/C++中#define的妙用分享
    目录1.数值类型输出易读的字符串形式2.易记的简化调用1.数值类型输出易读的字符串形式例如使用enum定义一些错误值,想要将数值类型的错误,输出易读的字符串形式重要的一句代码#define MAKE_PAIR(val) ...
    99+
    2023-02-23
    C define使用 define
  • c++中(a,b,c)什么意思
    c++++ 中 (a, b, c) 的含义 在 C++ 中,(a, b, c) 表示一个元组,这是一个用于存储不同类型数据的固定大小容器。 具体细节: 声明:元组使用以下语法声明:s...
    99+
    2024-05-09
    c++
  • const在c和c++中的区别
    在 c 和 c++ 中,const 关键字用于声明常量。在 c 中,const 只能修饰变量,不能修饰指针或数组;在 c++ 中,const 可以修饰变量、指针和数组。主要的差异在于:作...
    99+
    2024-04-28
    c++ 作用域
  • struct在c和c++中的区别
    c和c++中struct的区别包括:c中成员默认公开访问,c++中默认私有访问。c++可以在struct定义中初始化成员,c中不允许。c++支持成员函数,c不支持。c++不支持匿名str...
    99+
    2024-05-14
    c++
  • static在c和c++中的区别
    static关键字在c和c++中用于控制变量的生命周期和作用域。在c中,它延长局部变量和限制全局变量的作用域。在c++中,它还用于定义类成员变量和函数、命名空间中的变量和函数,以及函数内...
    99+
    2024-05-14
    c语言 c++ 作用域
  • c++中cin相当于c语言中的什么
    c++ 中的 cin 函数相当于 c 语言中的 scanf 函数,用于从标准输入读取数据。 cin 提供了更高级别的 i/o 操作,使用 &gt;&gt; 操作符来自动检...
    99+
    2024-04-26
    c语言 c++
  • 如何理解C++中复杂的C/C++声明
    如何理解C++中复杂的C/C++声明,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。怎么去学习和理解C和C++的复杂类型声明,下面的文章就开始一步一步教会你如何理...
    99+
    2023-06-17
  • c++中的inline和c中的结构体的区别
    问题: c++ 中的 inline 与 c 中的结构体的区别是什么?答案:inline 是 c++ 中的函数关键字,而结构体是 c 和 c++ 中的一种数据类型。inline 函数被内联...
    99+
    2024-05-10
    c++ 代码可读性
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作