,,C++ ofstream与ifstream详细用法

,,C++ ofstream与ifstream详细用法

Ofstream是从内存到硬盘,ifstream是从硬盘到内存。其实所谓的流缓冲就是内存空间。

在C中,有一个流类。所有的I/O都是基于这个“流”类,包括我们想知道的文件I/O。stream类有两个重要的操作符:

1.插入器()

将数据输出到流。例如,系统有一个默认的标准输出流(cout),它通常指的是显示器,因此cout 'Write Stdout ' ' \ n这意味着将字符串' Write Stdout '和换行符(' \n ')输出到标准输出流。

2、析取器()

输入流中的数据。比如系统有默认的标准输入流(cin),一般指键盘,所以cinx它意味着从标准输入流中读取指定类型(即变量x的类型)的数据。

在C中,文件的操作是通过stream的子类fstream(文件流)来实现的。因此,要以这种方式操作文件,必须添加头文件fstream.h。下面我们就把这种文件操作流程一个一个来说。

一、打开文件 在fstream类中,有一个成员函数open(),用来打开文件。它的原型是:

void open(const char* filename,int mode,int access);参数:

Filename:要打开的文件名。

模式:打开文件的方式。

访问:打开文件的属性。

打开文件的方式是在ios类中定义的(它是所有流I/O类的基类)。常见的值如下:

Ios:app:以追加方式打开文件。

Ios:ate:打开后在文件末尾定位文件,ios:app中包含该属性。

Ios:binary:以二进制模式打开文件,默认模式是文本模式。两种方式的区别见上。

Ios:in:通过输入打开文件(文件数据被输入到内存中)

Ios:out:文件作为输出打开(内存数据输出到文件)

Ios:nocreate:没有创建文件,因此当文件不存在时,打开会失败。

Ios:noreplace:不覆盖文件,所以打开文件时如果文件存在就失败。

Ios:trunc:如果文件存在,将文件长度设置为0。

可以用OR连接以上属性,比如ios:out|ios:binary。

打开文件的属性值为:

0:普通文件,开放访问

1:只读文件

2.隐藏文件

4.系统文件

可以用or或OR连接以上属性,例如3或1|2是用只读和隐式属性打开文件。

例如,用二进制输入打开文件c:\config.sys。

fstream文件1;

file1.open('c:\\config.sys ',ios:binary|ios:in,0);

如果open函数只有一个参数,即文件名,它将作为读/写普通文件打开,即:

file 1 . open(' c:\ \ config . sys ');=file1.open('c:\\config.sys ',ios:in|ios:out,0);

此外,fstream与open()具有相同的构造函数。对于上面的示例,文件可以在定义时打开:

fstream file 1(“c:\ \ config . sys”);特别地,fstream有两个子类:ifstream(输入文件流)和ofstream(输出文件流)。ifstream默认通过输入打开文件,ofstream默认通过输出打开文件。

ifstream file 2(' c:\ \ pdos . def ');//打开文件作为输入。

of stream file 3(' c:\ \ x . 123 ');//在输出模式下打开文件。所以,在实际应用中,根据不同的需求选择不同的类来定义:如果要在输入模式下打开文件,使用ifstream来定义;如果你想把它作为一个输出打开,使用ofstream来定义它;如果你想在输入/输出模式下打开它,使用fstream来定义它。

其次,关闭文件

打开的文件使用后必须关闭,fstream提供了一个成员函数close()来完成这个操作,比如file 1 . close();关闭连接到文件1的文件。

三。阅读和编写文档

读写文件可以分为读取文本文件和读取二进制文件。阅读文本文件相对简单,只需使用插入器和提取器。对于二进制读取,就比较复杂了。下面将详细介绍两种方法。

1、文本文件的读写 文本文件的读写很简单:使用inserter()输出到文件;使用extractor()从文件中输入。假设文件1作为输入打开,文件2作为输出打开。例子如下:

文件2“我爱你”;//将字符串“我爱你”写入文件

int I;

file1i//从文件中输入一个整数值。

该方法还具有简单的格式化能力,例如将输出指定为十六进制等。具体格式如下

操作员功能输入/输出

Dec格式的十进制数字数据输入和输出

Endl输出一个新行并刷新流输出。

输出一个空字符输出。

十六进制被格式化为十六进制数字数据输入和输出

Oct被格式化为八进制数字数据输入和输出。

Setpxecision(int p)设置浮点数的精度数字输出。

例如,将123作为十六进制输出:file1。

2、二进制文件的读写 put()

put()函数向流中写入一个字符,其原型是ofstream put(char ch),使用起来也比较简单,比如file 1 . put(' c ');就是在流中写一个字符c。

获取()

get()函数很灵活,有三种常用的重载形式:

一种是put()对应的形式:ifstream get(char ch);函数是从流中读取一个字符,结果保存在引用ch中。如果到达文件的末尾,它将返回一个空字符。例如file 2 . get(x);它意味着从文件中读取一个字符,并将读取的字符保存在x中。

另一个重载的原型是:int get();这个形式是从流中返回一个字符,如果到达文件末尾,返回EOF,比如x=file 2 . get();该函数与前面的示例相同。

还有一个原型:ifstreamget (char * buf,intnum,char delim=' \ n ');在这种形式中,字符被读入buf指向的数组,直到num个字符被读取或遇到delim指定的字符。如果不使用参数delim,将使用默认换行符' \n '。例如:

file2.get(str1,127,' A ');//将文件中的字符读取到字符串str1中,当遇到字符“a”或读取到127个字符时终止。

读写数据块。

要读写二进制数据块,请使用成员函数read()和write(),其原型如下:

read(无符号char *buf,int num);

write(const unsigned char *buf,int num);

Read()从文件中读取num个字符到buf指向的缓存中。如果在读取num个字符之前到达文件末尾,可以使用成员函数int gcount();获取实际读取的字符数;write()将buf指向的缓存中的num个字符写入文件。值得注意的是,缓存的类型是无符号char *,有时可能需要进行类型转换。

示例:

无符号char str1[]='我爱你';

int n[5];

if stream in(' XXX . XXX ');

of stream out(' yyy . yyy ');

out.write(str1,strlen(str 1));//将所有字符串str1写入yyy.yyy

in.read((无符号char*)n,sizeof(n));//从xxx.xxx中读取指定的整数,注意类型转换。

in . close();out . close();4.EOF检测

eof()成员用于检测是否到达了文件的末尾。如果到达文件末尾,它将返回一个非零值;否则,它将返回0。是原型int eof();

示例:if(in.eof()) ShowMessage('已到达文件结尾!');

动词(verb的缩写)文档定位

与C的文件操作模式不同,C I/O系统管理与一个文件相关联的两个指针。一个是读指针,指示输入操作在文件中的位置;另一个是写指针,是下一次写操作的位置。每次执行输入或输出时,相应的指针会自动改变。所以C的文件位置可以分为读位置和写位置,对应的成员函数是seekg()和seekp()。Seekg()是设置的读取位置,seekp是设置的写入位置。它们最常见的形式如下:

istream seekg(streamoff偏移量,seek_dir原点);

ostream seekp(streamoff偏移量,seek_dir原点);

Off stream在iostream.h中定义,定义了offset可以获得的最大值,seek_dir表示移动的参考位置,是一个枚举,有以下值:

Ios:beg:文件开头

Ios:cur:文件的当前位置

Ios:end:文件结尾

这两个函数通常用于二进制文件,因为文本文件可能会因为系统对字符的解释而与预期值不同。示例:

file1.seekg(1234,IOs:cur);//将文件的读取指针从当前位置向后移动1234个字节

file2.seekp(1234,IOs:beg);//将文件的写指针从文件的开头向后移动1234个字节

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: