- 浏览: 308273 次
- 性别:
- 来自: 大连
文章分类
- 全部博客 (272)
- java (42)
- c (49)
- 算法 (29)
- 汇编语言 (3)
- 字符集 (3)
- error (3)
- 搜索引擎 (2)
- 互联网 (18)
- linux (12)
- 网络 (20)
- VMWare (1)
- 面试 (7)
- c++ (55)
- 设计模式 (3)
- db (9)
- office (2)
- FS (1)
- rest (3)
- Ajax (2)
- Spring (2)
- Hibernate (3)
- matlab (1)
- load balancing (8)
- 分布式计算 (2)
- 易语言 (1)
- apache tomcat (1)
- 测试 (1)
- 数据结构 (5)
- 数学 (13)
- 服务器 (9)
- 读后感 (4)
- 好书介绍 (1)
- script (3)
- wordpress (2)
- delphi (21)
- pascal (8)
- xml (3)
- 趣味 (1)
- PHP (3)
- python (13)
- DLL (4)
- openGL (8)
- windows (2)
- QT (28)
- django (7)
- jquery (1)
- 数据挖掘 (7)
- nginx (1)
- js (1)
- mac (1)
- hadoop (3)
- 项目管理 (1)
- 推荐系统 (1)
- html (1)
最新评论
-
晴天1234:
related remove:attention.ibus和u ...
UBUNTU的默认root密码是多少,修改root密码 -
美丽的小岛:
美丽的小岛 写道如上配置好就得了。提示没有OpenGl.dll ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
如上配置好就得了。提示没有OpenGl.dll之类的,再增加入 ...
OpenGL学习入门之VS2010环境配置 [转] -
美丽的小岛:
主要是理清哪两个对象之间的关系,是信号与所有槽的关系或者是槽与 ...
QT之DisConnect -
美丽的小岛:
LPCTSTR类型:L表示long指针 这是为了兼容Windo ...
QString与各种字符串之间的转化
ofstream是从内存到硬盘,ifstream是从硬盘到内存,其实所谓的流缓冲就是内存空间;
在C++中,有一个stream这个类,所有的I/O都以这个“流”类为基础的,包括我们要认识的文件I/O,stream这个类有两个重要的运算符:
1、插入器(<<)
向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。
向流输出数据。比如说系统有一个默认的标准输出流(cout),一般情况下就是指的显示器,所以,cout<<"Write Stdout"<<'\n';就表示把字符串"Write Stdout"和换行字符('\n')输出到标准输出流。
2、析取器(>>)
从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。
从流中输入数据。比如说系统有一个默认的标准输入流(cin),一般情况下就是指的键盘,所以,cin>>x;就表示从标准输入流中读取一个指定类型(即变量x的类型)的数据。
在C++中,对文件的操作是通过stream的子类fstream(file stream)来实现的,所以,要用这种方式操作文件,就必须加入头文件fstream.h。下面就把此类的文件操作过程一一道来。
一、打开文件
在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:
在fstream类中,有一个成员函数open(),就是用来打开文件的,其原型是:
void open(const char* filename,int mode,int access);
参数:
filename: 要打开的文件名
mode: 要打开文件的方式
access: 打开文件的属性
打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:
mode: 要打开文件的方式
access: 打开文件的属性
打开文件的方式在类ios(是所有流式I/O类的基类)中定义,常用的值如下:
ios::app: 以追加的方式打开文件
ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
ios::in: 文件以输入方式打开(文件数据输入到内存)
ios::out: 文件以输出方式打开(内存数据输出到文件)
ios::nocreate: 不建立文件,所以文件不存在时打开失败
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc: 如果文件存在,把文件长度设为0
可以用“或”把以上属性连接起来,如ios::out|ios::binary
ios::ate: 文件打开后定位到文件尾,ios:app就包含有此属性
ios::binary: 以二进制方式打开文件,缺省的方式是文本方式。两种方式的区别见前文
ios::in: 文件以输入方式打开(文件数据输入到内存)
ios::out: 文件以输出方式打开(内存数据输出到文件)
ios::nocreate: 不建立文件,所以文件不存在时打开失败
ios::noreplace:不覆盖文件,所以打开文件时如果文件存在失败
ios::trunc: 如果文件存在,把文件长度设为0
可以用“或”把以上属性连接起来,如ios::out|ios::binary
打开文件的属性取值是:
0:普通文件,打开访问
1:只读文件
2:隐含文件
4:系统文件
可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。
1:只读文件
2:隐含文件
4:系统文件
可以用“或”或者“+”把以上属性连接起来,如3或1|2就是以只读和隐含属性打开文件。
例如:以二进制输入方式打开文件c:\config.sys
如果open函数只有文件名一个参数,则是以读/写普通文件打开,即:
file1.open("c:\\config.sys"); <=> file1.open("c:\\config.sys",ios::in|ios::out,0);
fstream file1;
file1.open("c:\\config.sys",ios::binary|ios::in,0);
file1.open("c:\\config.sys",ios::binary|ios::in,0);
file1.open("c:\\config.sys"); <=> file1.open("c:\\config.sys",ios::in|ios::out,0);
另外,fstream还有和open()一样的构造函数,对于上例,在定义的时侯就可以打开文件了:
fstream file1("c:\\config.sys");
特别提出的是,fstream有两个子类:ifstream(input file stream)和ofstream(outpu file stream),ifstream默认以输入方式打开文件,而ofstream默认以输出方式打开文件。
ifstream file2("c:\\pdos.def");//以输入方式打开文件
ofstream file3("c:\\x.123");//以输出方式打开文件
ofstream file3("c:\\x.123");//以输出方式打开文件
所以,在实际应用中,根据需要的不同,选择不同的类来定义:如果想以输入方式打开,就用ifstream来定义;如果想以输出方式打开,就用ofstream来定义;如果想以输入/输出方式来打开,就用fstream来定义。
二、关闭文件
打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如:file1.close();就把file1相连的文件关闭。
打开的文件使用完成后一定要关闭,fstream提供了成员函数close()来完成此操作,如:file1.close();就把file1相连的文件关闭。
三、读写文件
读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了;而对于二进制的读取就要复杂些,下要就详细的介绍这两种方式
读写文件分为文本文件和二进制文件的读取,对于文本文件的读取比较简单,用插入器和析取器就可以了;而对于二进制的读取就要复杂些,下要就详细的介绍这两种方式
1、文本文件的读写
文本文件的读写很简单:用插入器(<<)向文件输出;用析取器(>>)从文件输入。假设file1是以输入方式打开,file2以输出打开。示例如下:
文本文件的读写很简单:用插入器(<<)向文件输出;用析取器(>>)从文件输入。假设file1是以输入方式打开,file2以输出打开。示例如下:
file2<<"I Love You";//向文件写入字符串"I Love You"
int i;
file1>>i;//从文件输入一个整数值。
int i;
file1>>i;//从文件输入一个整数值。
操纵符 功能 输入/输出
dec 格式化为十进制数值数据 输入和输出
endl 输出一个换行符并刷新此流 输出
ends 输出一个空字符 输出
hex 格式化为十六进制数值数据 输入和输出
oct 格式化为八进制数值数据 输入和输出
setpxecision(int p) 设置浮点数的精度位数 输出
dec 格式化为十进制数值数据 输入和输出
endl 输出一个换行符并刷新此流 输出
ends 输出一个空字符 输出
hex 格式化为十六进制数值数据 输入和输出
oct 格式化为八进制数值数据 输入和输出
setpxecision(int p) 设置浮点数的精度位数 输出
比如要把123当作十六进制输出:file1<<hex<<123;要把3.1415926以5位精度输出:file1<<setpxecision(5)<<3.1415926。
2、二进制文件的读写
①put()
put()函数向流写入一个字符,其原型是ofstream &put(char ch),使用也比较简单,如file1.put('c');就是向流写一个字符'c'。
①put()
put()函数向流写入一个字符,其原型是ofstream &put(char ch),使用也比较简单,如file1.put('c');就是向流写一个字符'c'。
②get()
get()函数比较灵活,有3种常用的重载形式:
get()函数比较灵活,有3种常用的重载形式:
一种就是和put()对应的形式:ifstream &get(char &ch);功能是从流中读取一个字符,结果保存在引用ch中,如果到文件尾,返回空字符。如file2.get(x);表示从文件中读取一个字符,并把读取的字符保存在x中。
另一种重载形式的原型是: int get();这种形式是从流中返回一个字符,如果到达文件尾,返回EOF,如x=file2.get();和上例功能是一样的。
还有一种形式的原型是:ifstream &get(char *buf,int num,char delim='\n');这种形式把字符读入由 buf 指向的数组,直到读入了 num 个字符或遇到了由 delim 指定的字符,如果没使用 delim 这个参数,将使用缺省值换行符'\n'。例如:
file2.get(str1,127,'A'); //从文件中读取字符到字符串str1,当遇到字符'A'或读取了127个字符时终止。
要读写二进制数据块,使用成员函数read()和write()成员函数,它们原型如下:
read(unsigned char *buf,int num);
write(const unsigned char *buf,int num);
write(const unsigned char *buf,int num);
例:
unsigned char str1[]="I Love You";
int n[5];
ifstream in("xxx.xxx");
ofstream out("yyy.yyy");
out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中
in.read((unsigned char*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换
in.close();out.close();
int n[5];
ifstream in("xxx.xxx");
ofstream out("yyy.yyy");
out.write(str1,strlen(str1));//把字符串str1全部写到yyy.yyy中
in.read((unsigned char*)n,sizeof(n));//从xxx.xxx中读取指定个整数,注意类型转换
in.close();out.close();
成员函数eof()用来检测是否到达文件尾,如果到达文件尾返回非0值,否则返回0。原型是int eof();
例: if(in.eof()) ShowMessage("已经到达文件尾!");
五、文件定位
和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和seekp()。seekg()是设置读位置, seekp是设置写位置。它们最通用的形式如下:
和C的文件操作方式不同的是,C++ I/O系统管理两个与一个文件相联系的指针。一个是读指针,它说明输入操作在文件中的位置;另一个是写指针,它下次写操作的位置。每次执行输入或输出时,相应的指针自动变化。所以,C++的文件定位分为读位置和写位置的定位,对应的成员函数是seekg()和seekp()。seekg()是设置读位置, seekp是设置写位置。它们最通用的形式如下:
istream &seekg(streamoff offset,seek_dir origin);
ostream &seekp(streamoff offset,seek_dir origin);
ostream &seekp(streamoff offset,seek_dir origin);
streamoff定义于 iostream.h 中,定义有偏移量 offset 所能取得的最大值,seek_dir 表示移动的基准位置,是一个有以下值的枚举:
ios::beg: 文件开头
ios::cur: 文件当前位置
ios::end: 文件结尾
ios::cur: 文件当前位置
ios::end: 文件结尾
这两个函数一般用于二进制文件,因为文本文件会因为系统对字符的解释而可能与预想的值不同。例:
file1.seekg(1234,ios::cur); //把文件的读指针从当前位置向后移1234个字节
file2.seekp(1234,ios::beg); //把文件的写指针从文件开头向后移1234个字节
file2.seekp(1234,ios::beg); //把文件的写指针从文件开头向后移1234个字节
来自:
发表评论
-
vs2008【断点无效】解决方法
2015-04-13 10:05 785有时候,我们在用vs2008调试的时候,会出现断点无效。如下 ... -
C++对象使用错误之复制构造函数与赋值
2015-03-31 14:21 491先来一段会出错的代码: #pragma once ... -
c++多线程编程
2015-03-25 23:50 998http://blog.csdn.net/hitwengq ... -
《Windows核心编程》---图形用户界面之窗口<转>
2015-03-16 09:20 751图形用户界面之---窗口: 主函数一般是: /**** ... -
Qt源码学习(从Win32到Qt)
2015-03-15 23:03 2036本文以一个Win32的helloworld程序开篇, · ... -
C++模板之特化与偏特化详解
2015-01-07 14:44 832转自:http://www.jb51.net/a ... -
c++中的typename与class<转>
2015-01-07 08:51 828在泛型编程的形参表中,关键字typename和class具有 ... -
traits:Traits技术初探
2015-01-06 12:49 798概述:traits是一种特性萃取技术,它在Generic ... -
POD型别
2015-01-06 12:37 767POD全称Plain Old Data。通俗的讲,一个类或结 ... -
c++核心基础知识(内存管理)
2015-01-04 22:22 703内存管理是C++最令人切 ... -
RAII惯用法:C++资源管理的利器
2015-01-04 22:15 523RAII是指C++语言中的一个惯用法(idiom),它是“ ... -
内存分配器<转>
2015-01-04 22:07 1385题记:内存管理一直 ... -
operator new在C++中的各种写法
2015-01-04 19:27 1204http://blog.sina.com.cn/s/blo ... -
可变参数va_list
2014-12-26 17:45 8791.要在函数中使用参数,首先要包含头文件<stdarg ... -
char* 做map 的KEY的思考
2014-12-26 08:19 708很明显的道理,不要简单从字面上的东西去理解,虽然char* ... -
map注意的两个问题
2014-12-11 14:21 640代码1 void main() { ... -
关于C++ const 的全面总结<转>
2014-11-14 12:56 758C++中的const关键字的用法非常灵活,而使用const ... -
OpenGL超级宝典(第五版)环境配置【转】
2014-10-27 13:59 1492OpenGL超级宝典(第五版)环境配置 Vs2008+wi ... -
C++DLL编程详解
2014-10-08 19:44 1650DLL(Dynamic Link Library)的 ... -
C++&&QT调试时出现的一些错误
2014-10-08 15:14 787错误 原因 解决 ...
相关推荐
ofstream 和 ifstream 详细用法 ofstream 和 ifstream 是 C++ 中的文件流类,分别用于从内存到硬盘和从硬盘到内存的数据流。它们继承自 stream 类,提供了灵活的文件操作方式。 打开文件 在 fstream 类中,有一个...
了解并熟练掌握ofstream和ifstream的使用对于进行文件操作至关重要。 ofstream主要用于向文件写入数据,它继承自ostream类。使用ofstream,你需要先创建一个ofstream对象,然后调用它的open()成员函数来打开一个...
C++ ofstream 和 ifstream 详细用法 C++ 中的 ofstream 和 ifstream 是两种重要的文件流类,用于从内存到硬盘和从硬盘到内存的数据交换。它们是 C++ 中的流式 I/O 类的子类,具有灵活的操作文件的能力。 标题:...
ofstream, ifstream, 和 fstream 是C++标准库中的三个核心文件流类,它们属于 `<fstream>` 头文件,用于实现对磁盘文件的读写操作。这三个类是IO流库的一部分,它们提供了方便的接口来处理输入/输出操作。 ofstream...
- 在这段代码中,我们首先包含了 `<fstream>` 和 `<iostream>` 头文件,这是因为我们需要使用到 `ofstream` 类和 `cout` 输出流。 - 创建了一个名为 `outfile` 的 `ofstream` 对象,并打开了一个名为 `data.txt` 的...
在C++中,文件输入输出(I/O)是通过标准库中的stream类及其派生类来实现的,主要涉及到了ofstream和ifstream两个类,用于分别实现从内存到硬盘的写入操作(ofstream),以及从硬盘到内存的读取操作(ifstream)。...
- `<fstream>`:提供了文件输入输出流对象,如`ifstream`和`ofstream`。 - `<sstream>`:提供了字符串流对象,如`istringstream`和`ostringstream`。 - `<iomanip>`:提供了格式化输入输出的操作符。 2. **数学...
12. `<fstream>`:提供了文件输入/输出流类,如 `std::ifstream`、`std::ofstream` 和 `std::fstream`。 13. `<functional>`:包含函数对象(functors)和函数包装器,如 `std::function` 和 `std::bind`,用于封装...
5. `<fstream.h>`:提供I/O流类,用于文件操作,如`ifstream`、`ofstream`。 6. `<iomanip.h>`:支持格式化输入/输出,如设置宽度、填充字符等。 7. `<iostream.h>`:包含基本的数据流输入/输出对象,如`cin`、`cout...
7. `<fstream>`:这个头文件提供了文件输入/输出流类,如`std::ifstream`(输入文件流)和`std::ofstream`(输出文件流),用于读写磁盘文件。 8. `<sstream>`:包含流对象,如`std::istringstream`(输入字符串流)...
`<fstream>`是用于文件输入输出的头文件,提供了`std::ifstream`(输入文件流)、`std::ofstream`(输出文件流)和`std::fstream`(同时支持输入输出)类,便于文件数据的读写操作。 #### 3. `<sstream>` - 字符...
在C++编程中,ifstream和ofstream是用于输入和输出文件的标准库流对象,它们属于iostream库。这个程序示例展示了如何使用这两个类来实现文件的分割和合并功能,这对于处理大文件或者需要分块处理数据的场景非常有用...
7. `<fstream>`:这个头文件提供了`std::ifstream`(输入文件流)、`std::ofstream`(输出文件流)和`std::fstream`(双向文件流),用于读写磁盘上的文件。 8. `<exception>`:头文件`<exception>`定义了C++的异常...
掌握这些头文件的使用方法,对于提高程序开发效率和代码质量具有重要意义。此外,随着C++语言的发展,新的库和特性也在不断加入,开发者应当保持学习和探索的精神,充分利用这些强大的工具来编写高质量的软件。
根据提供的文件信息,本文将详细解析`ifstream`与文件输入输出相关的知识点,包括但不限于`ifstream`的基本概念、构造函数及参数解释、文件打开模式、示例代码分析等。 ### `ifstream`基本概念 `ifstream`是C++...
C++标准库提供了`fstream`类来处理文件操作,包括`ifstream`(输入文件流)和`ofstream`(输出文件流)。以下是一个简单的示例,展示如何打开并读取一个TXT文件: ```cpp #include <fstream> #include <iostream> ...
如<iostream>用于IO流操作,<vector>和<list>提供动态数组和链表容器,<algorithm>包含了一系列通用的算法,如排序、查找等。此外,C++还引入了异常处理(<exception>)、智能指针(<memory>)等高级特性,极大地...
12. `<sstream>`:提供了`std::istringstream`、`std::ostringstream`和`std::stringstream`,允许在字符串中进行读写操作,类似于`std::ifstream`和`std::ofstream`。 13. `<assert.h>`:包含断言机制`assert`,...