ifstream写文件(ifstream创建文件)

ifstream写文件(ifstream创建文件)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> 

讯享网

  • 在C++中,文件操作属于技术的应用,不是基本语法。
  • 数据持久化的两种方式:文件和数据库。
    在这里插入图片描述
    讯享网
    文本文件一般以行的形式组织数据。
    包含头文件:
    类:
    示例:
讯享网

在这里插入图片描述
对于open()成员函数的参数,可以用C风格的字符串,也可以用string.

 

如果要指定目录的话:

讯享网

一般文件名要全路径,书写的方法如下:

  1. 错误。
  2. 原始字面量,C++11标准。
  3. 转义字符。
  4. 把斜线反着写。
  5. Linux系统采用的方法。

创建文件输出流对象,打开文件,如果文件不存在,则创建它。

 
讯享网

这里有三种方法:

  1. 第一种
 
  1. 第二种第二个参数是最多读取内容的字节数
讯享网
  1. 第三个
 
讯享网

首先我们先看看数据在内存中的分配
在这里插入图片描述
对于第一个string类型的。每个字节存放一个字符,字符在内存中存放的是码,不是符号。

对于第二个int类型的。如果是整数变量存放,那么它就是二进制数据,或者二进制格式。

文件操作

  • 写文件:把内存中的数据转移到磁盘文件中。
  • 读文件:把磁盘文件中的数据转移到内存中。
  • 内存和硬盘都是存储设备,本质上没有区别。

文本文件和二进制文件

  • 文本文件:存放的是字符串,以行的方式组织数据,每个字节都是有意义的符号。
  • 二进制文件:存放的不一定是字符串,以数据类型组织数据,内容要作为一个整体来考虑,单个字节没有意义。

二进制文件以数据块的形式组织数据,把内存中的数据直接写入文件。
包含头文件:
类:
打开文件的模式(方式):
对于,不管用哪种模式打开文件,如果文件不存在,都会创建文件。

ios:out         缺省值:会截断文件内容。
ios:trunc      截断文件内容。(truncate)
ios:app        不截断文件内容,只在文件未尾追加文件。(append)
ios::binary     以二进制的方式打开文件

文本和二进制方式的区别:

  1. 在windows平台下,文本文件的换行标志是。
  2. 在windows平台下,如果以文本方式打开文件,写入数据的时候,系统会将转换成;读取数据的时候,系统会将转换成。如果以二进制方式打开文件,写和读都不会进行转换。
 

在这里插入图片描述

二进制文件的格式

  • 二进制文件的格式多样,由业务需求决定。
  • 程序员自定义的二进制文件格式,只有程序员自己才知道。
  • 通用的二进制文件格式: mp3(音乐)、mp4(视频)、bmp(位图)、jpg(图片)、png(图片)

文本文件VS二进制文件

  • 文件文件:由可显示的字符组成,方便阅读(解码),占用的空间比较多。
  • 二进制文件:由比特0和1组成,组织数据的格式与文件用途有关,不方便阅读(解码)。为了节省存储空间,还可能采用压缩技术。为了保证数据安全,也可能采用加密技术。

包含头文件
类:
ifstream 打开文件的模式(方式):
对于,如果文件不存在,则打开文件失败

讯享网
 
  1. 在windows 平台下,文本文件的换行标志是. (也就是多两个字节)
  2. 在linux平台下,文本文件的换行标志是。
  3. 在windows平台下,如果以文本方式打开文件,写入数据的时候,系统会将转换成
    ;读取数据的时候,系统会将转换成。如果以二进制方式打开文件,写和读都不会进行转换。
  4. 在Linux平台下,以文本或二进制方式打开文本文件,系统不会做任何转换。
  5. 以文本方式读取文件的时候,遇到换行符停止,读入的内容中没有换行符;以二制方式读取文件的时候,遇到换行符不会停止,读入的内容中包括换行符(换行符被视为数据)。
  6. 在实际开发中,从兼容和语义考虑,一般: a)以文本模式打开文本文件,用行的方法操作它;b)以二进制模式打开二进制文件;用数据块的方法操作它;c)以二进制模式打开文本文件,用数据块的方法操作它(不用行hang的方法),这种情况表示不关心数据的内容;d)不要以文本模式打开二进制文件,也不要用行的方法操作二进制文件,可能会破坏二进制数据文件的格式,也没有必要。(因为二进制文件中的某字节的取值可能是换行符,但它的意义并不是换行,可能是整数n个字节中的某个字节)

之前讲了类,还有类。
下面讲一下类。
类既可以读文本/二进制文件,也可以写文本/二进制文件。
类的缺省模式是。
普遍的做法是:

  1. 如果只想写入数据,用;如果只想读取数据,用;如果想写和读数据,用,这种情况不多见。不同的类体现不同的语义。
    也就是对于上面的代码将或者改成。这种情况不多见。不同的类体现不同的语义。
  2. 在Linux平台下,文件的写和读有严格的权限控制。(需要的权限越少越好)
  1. 获取文件位置指针
    类的成员函数是;类的成员函数是,类两个都有,效果相同
讯享网

例如:

 

对于这个结果:

他的位置指针是自己变化的,不需要我们进行调整。
2. 移动文件位置指针
类的函数是 类的函数是 fstream类两个都有,效果相同。
方法一:

讯享网

方法二:

 
讯享网

在这里插入图片描述
写文件的时候,就是先向缓冲区中写数据,如果缓冲区满了,然后在向磁盘中写入。
读数据的时候,就是系统先把更多的数据从磁盘文件中读取出来,放到缓冲区中。
总的来说,缓冲区可以减少磁盘I/O的次数,提高读和写的效率。

文件缓冲区(缓存)是系统预留的内存空间,用于存放输入或输出的数据。
根据输出和输入流,分为输出缓冲区和输入缓冲区。
注意,在C++中,每打开一个文件,系统就会为它分配缓冲区。不同的流,缓冲区是独立的。程序员不用关心输入缓冲区,只关心输出缓冲区就行了。
在缺省模式下,输出缓冲区中的数据满了才把数据写入磁盘,但是,这种模式不一定能满足业务的需求。
输出缓冲区的操作:

  1. flush()成员函数
    直接刷新缓冲区。
  2. endl
    换行,然后刷新缓冲区
  3. unitbuf
    fout&lt;&lt;unitbuf;
    设置fout输出流,在每次操作之后都进行刷新缓冲区。
  4. nounitbuf
    fout&lt;&lt;nounitbuf;
    设置fout输出流,让fout回到缺省的缓冲方式

  1. eofbit
    当输入流操作到达文件末尾时,将设置eofbit。
    eof()成员函数检查流是否设置了eofbit。
  2. badbit
    无法诊断的失败破坏流时,将设置badbit。(例如:对输入流进行写入;磁盘没有剩余空间)。bad()成员函数检查流是否设置了badbit。
  3. failbit
    当输入流操作未能读取预期的字符时,将设置failbit(非致命错误,可挽回,一般是软件错误,例如:想读取一个整数,但内容是一个字符串;文件到了未尾)IО失败也可能设置 failbit。
    fail()成员函数检查流是否设置了failbit。
  4. clear()成员函数清理流状态。
  5. setstate()成员函数重置流状态。

小讯
上一篇 2025-04-30 15:13
下一篇 2025-04-19 23:45

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/171912.html