
inti;
file1>>i;//从文件输入一个整数值。
这种方式还有一种简单的格式化能力,比如可以指定输出为16进制等等,具体的格式有以下一些
操纵符功能输入/输出
dec格式化为十进制数值数据输入和输出
endl输出一个换行符并刷新此流输出
ends输出一个空字符输出
hex格式化为十六进制数值数据输入和输出
oct格式化为八进制数值数据输入和输出
setpxecision(intp)设置浮点数的精度位数输出
比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。
2、二进制文件的读写
①put()
put()函数向流写入一个字符,其原型是ofstream&put(charch),使用也比较简单,如file1.put('c');就是向流写一个字符'c'。
②get()
get()函数比较灵活,有3种常用的重载形式:
一种就是和put()对应的形式:ifstream&get(char&ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。
另一种重载形式的原型是:intget();这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。
还有一种形式的原型是:ifstream&get(char*buf,intnum,chardelim='\n');这种形式把字符 读入由buf指向的数组,直到读入了num个字符或遇到了由delim指定的字符,如果没使用delim这个参数,将使用缺省值换行符' \n'。例如:
file2.get(str1,127,'A');//从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。
③读写数据块
要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:
read(unsignedchar*buf,intnum);
write(constunsignedchar*buf,intnum);
read()从文件中读取num个字符到buf指向的缓存中,如果在还未读入num个字符时就到了文件尾,可以用成员函数 intgcount();来取得实际读取的字符数;而write()从buf指向的缓存写num个字符到文件中,值得注意的是缓存的类型是 unsignedchar*,有时可能需要类型转换。
例:
unsignedcharstr1[]="ILoveYou";
intn[5];
ifstreamin("xxx.xxx");
ofstreamout("yyy.yyy");
out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中
in.read((unsignedchar*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换
in.close();out.close();
四、检测EOF
成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。原型是inteof();
例: if(in.eof())ShowMessage("已经到达文件尾!");
五、文件定位
和C的文件操作方式不同的是,C++I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下 次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和 seekp(),seekg()是设置读位置,seekp是设置写位置。它们最通用的形式如下:
istream&seekg(streamoffoffset,seek_dirorigin);
ostream&seekp(streamoffoffset,seek_dirorigin);
streamoff定义于iostream.h中,定义有偏移量offset所能取得的最大值,seek_dir表示移动的基准位置,是一个有以下值的枚举:
ios::beg: 文件开头
ios::cur: 文件当前位置
ios::end: 文件结尾
这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。
例:
file1.seekg(1234,ios::cur);//把文件的读指针从当前位置向后移1234个字节
file2.seekp(1234,ios::beg);//把文件的写指针从文件开头向后移1234个字节
分享到:
相关推荐
C++ I/O流的常用控制符和特殊字符 C++ 中的 I/O 流是一个非常重要的概念,它使得...C++ 中的 I/O 流控制符和特殊字符是非常重要的概念,它们可以帮助程序员方便地实现输入和输出操作。掌握这些知识点是编程的基础。
在Unix操作系统环境中,I/O(Input/Output)操作是程序与外部设备交互的关键途径,包括读取数据、写入数据以及控制硬件设备等。在处理多个文件或套接字时,I/O聚集和分离是优化性能和管理资源的重要手段。本篇文章将...
C++中的I/O流是程序处理输入和键盘输入、输出和屏幕输出的一种统一方式。这一概念在第二章“作为对象和类介绍的I/O流”中被深入探讨。本章涵盖了几个关键知识点,包括基本的文件I/O、流工具、字符I/O以及继承。 2.1...
介绍了 C++的 I/O( 输入输出 )问题,本文结构清晰,讲解简单易懂,对 C++ 的流模型作为细致的分析和讲解, 并介绍了 IO 流类中的各种成员函数,对于输出部分介绍了 cout 流, put 和 write 函数,介绍了 4 种控制...
标准I/O库中的流是一个抽象概念,代表数据的流向,由FILE结构体表示。流有三种缓冲类型:全缓冲、行缓冲和无缓冲,根据不同的应用场景选择合适的缓冲策略。 具体到标准I/O编程,以fopen函数为例,它用于打开一个...
在MATLAB中,I/O(输入/输出)操作是编程过程中不可或缺的一部分,它涉及到数据的读取、写入以及与其他程序或硬件设备的交互。MATLAB提供了丰富的函数库来支持这些功能,使得用户能够轻松地处理文件和数据流。下面...
4. **同步和异步I/O**:同步I/O是阻塞的,而异步I/O允许进程在等待I/O完成时继续执行其他任务。Linux内核提供AIO(Asynchronous I/O)接口来支持异步操作。 5. **选择和轮询**:当多个进程等待同一个设备时,可以...
### C++高级程序设计实验十二模板类的构造 & C++的I/O流类库 #### 实验目的 1. **理解和应用类模板和函数模板**:掌握如何定义和使用类模板以及函数模板来提高代码的复用性。 2. **理解C++输入输出流类库**:熟悉...
在编程领域,文件输入输出(File Input/Output,简称File I/O)是处理数据和程序持久化存储的关键技术。在给定的标题“fileIO_sample.c_fileI/O_”和描述“file input and output”中,我们可以理解这是一个关于...
### 如何使用 `<fstream>` 类进行文件的 I/O 处理 #### 摘要 传统的文件 I/O 库如 Unix 的 `<io.h>` 和 `<stdio.h>`,由于其程序接口的原因,在很大程度上强制程序员进行某些处理,缺乏类型安全和国际化支持。C++ ...
首先,I/O是计算机与外部设备交互的过程,包括读取数据、写入数据或者发送控制命令。在多进程环境中,进程间的I/O通信是必要的,以便一个进程能够传递信息给另一个进程。这可以通过共享内存、消息队列、套接字等多种...
在用户空间,I/O软件通常以库函数的形式存在,比如C语言中的`printf()`和`scanf()`,以及C++中的流操作符`和`>>`。这些函数为程序员提供了便捷的接口来执行I/O操作,但它们并不直接与硬件交互。相反,它们会通过系统...
7. **流式I/O**:在高级编程接口中,如C++的iostream库或Java的IO流,提供了一种抽象的方式来处理I/O,使得代码更易读和维护。 8. **网络I/O**:在网络编程中,I/O控制涉及到套接字(socket)操作,如TCP连接的建立...
综上所述,Unix环境下的高级I/O技术涵盖了非阻塞I/O、记录锁、系统V流机制、I/O多路转接、向量I/O以及存储映射I/O等多种策略,每种技术都有其独特的优势和适用场景。掌握这些高级I/O概念和技术,对于开发高性能、高...
描述符包含了关于文件或流的信息,如文件句柄、缓冲区地址、读写位置以及I/O操作的状态。它们为Symbian的异步I/O模型提供了基础,使得程序可以在等待I/O操作完成时继续执行其他任务,从而提高了系统的整体效率。 ...
本教程将引导你入门C++的I/O流库,帮助你更好地理解和运用这一核心概念。 I/O流是C++中处理数据输入和输出的一种机制。它提供了一种抽象的方式,使得程序可以与外部环境(如文件、屏幕等)进行数据交互。在I/O流中...
例如,Modbus协议就常用于流设备,通过定义输入和输出终止符来处理数据包的边界。 2. Asyn Port Drivers:Asyn(异步)端口驱动程序是EPICS中的关键组件,它提供了一种通用的、可扩展的接口,支持TCP/IP、UDP/IP、...