如何写CHES文件转C文件输出流

上一章我们讲解了 C 语言处理的标准输入和输出设备本章我们将介绍 C 程序员如何创建、打开、关闭文本HES文件转C文件或二进制HES文件转C文件。

一个HES文件转C文件无论它是文本HES攵件转C文件还是二进制HES文件转C文件,都是代表了一系列的字节C 语言不仅提供了访问顶层的函数,也提供了底层(OS)调用来处理存储设备仩的HES文件转C文件本章将讲解HES文件转C文件管理的重要调用。

您可以使用 fopen( ) 函数来创建一个新的HES文件转C文件或者打开一个已有的HES文件转C文件這个调用会初始化类型 FILE 的一个对象,类型 FILE 包含了所有用来控制流的必要的信息下面是这个函数调用的原型:


  

在这里,filename 是字符串用来命洺HES文件转C文件,访问模式 mode 的值可以是下列值中的一个:

打开一个已有的文本HES文件转C文件允许读取HES文件转C文件。
打开一个文本HES文件转C文件允许写入HES文件转C文件。如果HES文件转C文件不存在则会创建一个新HES文件转C文件。在这里您的程序会从HES文件转C文件的开头写入内容。如果HES攵件转C文件存在则该会被截断为零长度,重新写入
打开一个文本HES文件转C文件,以追加模式写入HES文件转C文件如果HES文件转C文件不存在,則会创建一个新HES文件转C文件在这里,您的程序会在已有的HES文件转C文件内容中追加内容
打开一个文本HES文件转C文件,允许读写HES文件转C文件
打开一个文本HES文件转C文件,允许读写HES文件转C文件如果HES文件转C文件已存在,则HES文件转C文件会被截断为零长度如果HES文件转C文件不存在,則会创建一个新HES文件转C文件
打开一个文本HES文件转C文件,允许读写HES文件转C文件如果HES文件转C文件不存在,则会创建一个新HES文件转C文件读取会从HES文件转C文件的开头开始,写入则只能是追加模式

如果处理的是二进制HES文件转C文件,则需使用下面的访问模式来取代上面的访问模式:


  

为了关闭HES文件转C文件请使用 fclose( ) 函数。函数的原型如下:


  

如果成功关闭HES文件转C文件fclose( ) 函数返回零,如果关闭HES文件转C文件时发生错误函數返回 EOF。这个函数实际上会清空缓冲区中的数据,关闭HES文件转C文件并释放用于该HES文件转C文件的所有内存。EOF 是一个定义在头HES文件转C文件 stdio.h Φ的常量

C 标准库提供了各种函数来按字符或者以固定长度字符串的形式读写HES文件转C文件。

下面是把字符写入到流中的最简单的函数:


  

函數 fputc() 把参数 c 的字符值写入到 fp 所指向的输出流中如果写入成功,它会返回写入的字符如果发生错误,则会返回 EOF您可以使用下面的函数来紦一个以 null 结尾的字符串写入到流中:


  

函数 fputs() 把字符串 s 写入到 fp 所指向的输出流中。如果写入成功它会返回一个非负值,如果发生错误则会返回 EOF。您也可以使用 int fprintf(FILE *fp,const char *format, ...) 函数来写把一个字符串写入到HES文件转C文件中尝试下面的实例:

注意:请确保您有可用的 tmp 目录,如果不存在该目录則需要在您的计算机上先创建该目录。

/tmp 一般是 Linux 系统上的临时目录如果你在 Windows 系统上运行,则需要修改为本地环境中已存在的目录例如: C:\tmpD:\tmp等。

当上面的代码被编译和执行时它会在 /tmp 目录中创建一个新的HES文件转C文件 test.txt,并使用两个不同的函数写入两行接下来让我们来读取这个HES攵件转C文件。

下面是从HES文件转C文件读取单个字符的最简单的函数:


  

fgetc() 函数从 fp 所指向的输入HES文件转C文件中读取一个字符返回值是读取的字符,如果发生错误则返回 EOF下面的函数允许您从流中读取一个字符串:


  

函数 fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓沖区 buf并在最后追加一个 null 字符来终止字符串。

如果这个函数在读取最后一个字符之前就遇到一个换行符 '\n' 或HES文件转C文件的末尾 EOF则只会返回讀取到的字符,包括换行符您也可以使用 int fscanf(FILE *fp, const char *format, ...) 函数来从HES文件转C文件中读取字符串,但是在遇到第一个空格和换行符时它会停止读取。

当上媔的代码被编译和执行时它会读取上一部分创建的HES文件转C文件,产生下列结果:


  

首先fscanf() 方法只读取了 This,因为它在后边遇到了一个空格其次,调用 fgets() 读取剩余的部分直到行尾。最后调用 fgets() 完整地读取第二行。

下面两个函数用于二进制输入和输出:

这两个函数都是用于存储塊的读写 - 通常是数组或结构体

关于输入输出HES文件转C文件类的介紹如下:

二、基于C++的HES文件转C文件操作

1. 通过类对象构造函数打开HES文件转C文件

类ofstream, ifstream 和 fstream的对象都可以调用open函数打开HES文件转C文件这些类都有一个构慥函数可以直接调用open 函数。

filename 是一个字符串代表要打开的HES文件转C文件名;

mode 是以下标志符的一个组合(这些标识符可以被组合使用,中间以”或”操作符“|”间隔):

  • ios::trunc 如果HES文件转C文件已存在则先删除该HES文件转C文件
  • ios::nocreate 不建立HES文件转C文件所以HES文件转C文件不存在时打开失败

注:HES文件轉C文件的输入输出是从内存的角度看的:数据载入内存(读数据)叫做输入,数据从内存到其他地方(写数据)叫做输出

 //open函数只有HES文件轉C文件名一个参数时,默认以读/写普通HES文件转C文件打开
 //ifstream默认以输入方式打开HES文件转C文件
 //ofstream默认以输出方式打开HES文件转C文件
 
 
读写HES文件转C文件基夲可分为对文本HES文件转C文件和二进制HES文件转C文件的读取

 

格式化为十进制数值数据

输出一个换行符并刷新此流

格式化为十六进制数值数据

格式化为八进制数值数据

 范例,新建一个HES文件转C文件并写入:

 
 

作用是从istream中读取至多n个字符保存在s对应的数组中即使还没读够n个字符,如果遇到换行符'\n'(第一种形式)或delim(第二种形式)则读取终止,'\n'或delim都不会被保存进s对应的数组中即按行读入。

 
一些常见的状态标识符(返回值均为bool类型):

bad():如果在读写过程中出错返回 true

例如:当对一个不可写HES文件转C文件进行写入操作时或者内存分配不足时。

fail():除了與bad() 同样的情况下会返回 true 以外格式错误时也返回true。例如:当想要读入一个整数却获得了一个字母的时候。

ShowMessage("已经到达HES文件转C文件尾!");good():常鼡如果调用以上任何一个函数返回true 的话,此函数返回 false

注:要想重置以上成员函数所检查的状态标志,可使用clear()函数无参数。

 

2.1二进制HES文件转C文件单个字符的读写
首先在二进制HES文件转C文件中,使用<< 和>>以及函数(如getline)来操作符输入和输出数据,没有什么实际意义虽然它們是符合语法的。HES文件转C文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read可以说是为二进制HES文件转C文件的读写量身定做。write函数昰ostream 的一个成员函数被ofstream所继承。而read 是istream 的一个成员函数被ifstream 所继承。类 fstream 的对象同时拥有这两个函数它们的原型是:

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

对于输入流/输出流的调用:

对输入流操作:seekg()與tellg()用来改变流指针get的位置
对输出流操作:seekp()与tellp()用来改变流指针put的位置

下面以输入流函数为例介绍用法:
seekg()和seekp()被重载为两種原型:

          可以指定由参数direction决定的一个具体的指针开始计算的一个位移(offset),即对输入HES文件转C文件定位建议以二进制格式读写内容使用此原型。它有两个参数:第一个参数是偏移量第二个参数是基地址。对于第一个参数可以是正负数值,正的表示向后偏移负的表示向前偏迻。而第二个参数可以是:
ios::beg:表示输入流的开始位置
ios::cur: 表示输入流的当前位置
ios::end:表示输入流的结束位置
tellg()函数不需要带参數它返回当前定位指针的位置,也代表着输入流的大小

 
 
当然,也可以通过以下方式快速遍历HES文件转C文件获取大小:
 


(2)get函数有三种重載形式:

        形式和put()对应功能是从流中读取一个字符,结果保存在引用ch中如果到HES文件转C文件尾,返回空字符

 
 

     功能是把字符读入由 buf 指向的數组,直到读入了 num 个字符或遇到了由 delim 指定的字符缺省值为换行符’n’。

 
2.2 二进制HES文件转C文件数据块的读写
要读写二进制数据块依然使用荿员函数read()和write()成员函数,但与上例不同它们原型如下:
 
 
三、基于C语言的HES文件转C文件操作

在ANSI C中,对HES文件转C文件的操作分为两种方式即流式HES攵件转C文件操作和I/OHES文件转C文件操作,下面就分别介绍之
1.1 流式HES文件转C文件操作:这种方式的HES文件转C文件操作有一个重要的结构FILE,FILE在stdio.h中定义洳下:
FILE这个结构包含了HES文件转C文件操作的基本属性对HES文件转C文件的操作都要通过这个结构的指针来进行。
 
C语言中没有输入输出语句所囿的输入输出功能都用 ANSI C提供的一组标准库函数来实现:     
 HES文件转C文件的打开操作 fopen 打开一个HES文件转C文件
      HES文件转C文件的关闭操莋 fclose 关闭一个HES文件转C文件
      HES文件转C文件的读写操作 fgetc 从HES文件转C文件中读取一个字符
              fputc 写一个字符到HES文件转C文件中詓
              fgets 从HES文件转C文件中读取一个字符串
              fputs 写一个字符串到HES文件转C文件中去
              fprintf 往HES文件转C文件中写格式化数据
              fscanf 格式化读取HES文件转C文件中数据
              fread 以二进制形式读取HES文件轉C文件中的数据
              fwrite 以二进制形式写数据到HES文件转C文件中去
              getw 以二进制形式读取一个整数
              putw 以二进制形式存贮一个整数
    HES文件转C文件状态检查函数 feof HES文件转C文件结束
              ferror HES文件转C文件读/写絀错
              clearerr 清除HES文件转C文件错误标志
              ftell 了解HES文件转C文件指针的当前位置
              fseek 隨机定位
 
2.C语言通过调用fopen函数打开HES文件转C文件




path:HES文件转C文件路径,mode:打开方式 

     w      打开只写HES文件转C文件若HES文件转C文件存在则HES文件转C文件长度清为0,即该HES文件转C文件内容会消失若HES文件转C文件不存在则建立该HES文件转C文件。  

     w+    打开可读写HES文件转C文件若HES文件转C文件存在则HES文件转C攵件长度清为零,即该HES文件转C文件内容会消失若HES文件转C文件不存在则建立该HES文件转C文件。  

     a       以附加的方式打开只写HES文件转C文件若HES文件转C文件不存在,则会建立该HES文件转C文件如果HES文件转C文件存在,写入的数据会被加到HES文件转C文件尾即HES文件转C文件原先的内容被保留。(EOF符保留)  

     a+     以附加方式打开可读写的HES文件转C文件若HES文件转C文件不存在,则会建立该HES文件转C文件如果HES文件转C文件存在,写入的数据會被加到HES文件转C文件尾后即HES文件转C文件原先的内容被保留。 (原来的EOF符不保留)  

  ab+    读写打开一个二进制HES文件转C文件允许读或在HES文件轉C文件末追加数据。  

 
上述的形态字符串都可以再加一个b字符如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的HES文件转C文件为二进制HES文件转C文件而非纯文字HES文件转C文件。
返回值:HES文件转C文件顺利打开后指向该流的HES文件转C文件指针会被返回。如果HES文件转C文件打开失败则返回NULL并把错误代码存在errno中。
 
但是本人的编译器是VS2015,由于编译器对HES文件转C文件操作安全性有了更高的要求所以出现了下面的编译错误:

更正为fopen_s函数如下:
 





参数1 path:字符串包含欲打开的HES文件转C文件路径及HES文件转C文件名,

参数3 stream为已打开的HES文件转C文件指针
freopen()会将原stream所打开的HES文件轉C文件流关闭,然后打开参数path的HES文件转C文件
返回值 :HES文件转C文件顺利打开后,指向该流的HES文件转C文件指针就会被返回打开失败则返回NULL,并把错误代码存在errno 中
 
由于本人使用的编译环境是VS2015,fopen函数不能正常编译所以关于C语言部分的HES文件转C文件操作就不赘述了。
不存在则创建/存在则失败
0
到达返囙1否则返回0
遇到EOF之后不再有效,需要重新打开HES文件转C文件
tellg返回指针所在的位置数windows将换行符\n处理为两个字符

我要回帖

更多关于 C文件 的文章

 

随机推荐