C++对文件进行读写操作
2017-11-17 16:53
435 查看
1、 定义数据流对象指针
对文件进行读写操作首先必须要定义一个数据流对象指针,数据流对象指针有三种类型,它们分别是:
Ifstream:表示读取文件流,使用的时候必须包含头文件“ifstream”;
Ofstream:表示文件写入流,使用的时候必须包含头文件“ofstream”;
Fstream:表示文件读取/写入流,使用的时候必须包含头文件“fstream”;
2、 打开文件
打开文件可以调用两个函数,其一是使用open函数,其二是使用数据流对象的构造函数。这两个函数调用的参数基本上一致的,以open函数为例:
参数filename表示文件名,如果该文件在目录中不存在,那么该函数会自动创建该文件;参数mode表示打开方式,这里打开方式有一下四种,如表1,并且这些方式可以以“|”的或的方式组合使用。
表1
参数prot表示文件打开的属性,基本上很少用到。
3、 文件的读写操作
由于类ofstream, ifstream 和fstream 是分别从ostream, istream 和iostream 中引申而来的,所以文件的读写操作与使用控制台函数cin和cout一样,“<<”表示对文件进行写操作,“>>”表示对文件进行读操作。
根据数据流读写的状态,有4个验证函数,它们分别是:
· bad()
如果在读写过程中出错,返回 true 。例如:当我们要对一个不是打开为写状态的文件进行写入时,或者我们要写入的设备没有剩余空间的时候。
· fail()
除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读入一个整数,而获得了一个字母的时候。
· eof()
如果读文件到达文件末尾,返回true。
· good()
这是最通用的:如果调用以上任何一个函数返回true 的话,此函数返回 false 。
4、 获得或者设置流指针
获得流指针的位置有两个函数,它们是
Long tellg() 和 long tellp()这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++标准) ,就是一个整数,代表当前get 流指针的位置 (用tellg) 或 put 流指针的位置(用tellp)。
设置流指针的位置根据输入输出流指针类型不同,也有两个函数,它们是:
seekg() 和seekp()这对函数分别用来改变流指针get 和put的位置。两个函数都被重载为两种不同的原型:
seekg ( pos_type position );
seekp ( pos_type position );
使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。要求传入的参数类型与函数 tellg 和tellp 的返回值类型相同。
seekg ( off_type offset, seekdirdirection );
seekp ( off_type offset, seekdir direction );
使用这个原型可以指定由参数direction决定的一个具体的指针开始计算的一个位移(offset),它们如表2所示。
表2
5、关闭文件
调用函数close(),可以关闭流对象所指向的文件,释放流指针之后,那么该数据流就可以指向其它的文件进行操作了。
下面对文件一般的读写举个例子:
1)在文件末尾写入数据:假设mytext.tex文件中已经有了数据,如图1所示,然后在其末尾写入1到10的整数,运行结果如图2,代码如下。
![](https://img-blog.csdn.net/20171117180220202?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSHVudGVyX3BjeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图1
![](https://img-blog.csdn.net/20171117180234969?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSHVudGVyX3BjeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图2
2)对文件从新写入数据,只需要默认mode参数就可以了,本例是在例1)的文件mytext的基础上写入2到20的偶数,运行结果如图3,会发现本例的结果将例1)的结果覆盖了。
![](https://img-blog.csdn.net/20171117180249280?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSHVudGVyX3BjeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图3
3)在文件中的指定位置写入数据:本例在例2)的mytex文件的内容中,在第11个数据位置写入11.运行结果如图4所示,在写入后获取当前位置,运行结果如图5所示。
![](https://img-blog.csdn.net/20171117180304198?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSHVudGVyX3BjeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图4
![](https://img-blog.csdn.net/20171117180316795?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSHVudGVyX3BjeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图5
4)读取文件中的数据:这里将文件mytext里面的数据读入到字符串中,并且显示出来,结果如图6所示。
![](https://img-blog.csdn.net/20171117180332570?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvSHVudGVyX3BjeA==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
图6
要是有帮助到亲的话,可不要忘了给皮皮点个赞呢
对文件进行读写操作首先必须要定义一个数据流对象指针,数据流对象指针有三种类型,它们分别是:
Ifstream:表示读取文件流,使用的时候必须包含头文件“ifstream”;
Ofstream:表示文件写入流,使用的时候必须包含头文件“ofstream”;
Fstream:表示文件读取/写入流,使用的时候必须包含头文件“fstream”;
2、 打开文件
打开文件可以调用两个函数,其一是使用open函数,其二是使用数据流对象的构造函数。这两个函数调用的参数基本上一致的,以open函数为例:
void open(const char * filename, ios_base::openmode mode = ios_base::in | ios_base::out); void open(const wchar_t *_Filename, ios_base::openmode mode = ios_base::in | ios_base::out, int prot = ios_base::_Openprot);
参数filename表示文件名,如果该文件在目录中不存在,那么该函数会自动创建该文件;参数mode表示打开方式,这里打开方式有一下四种,如表1,并且这些方式可以以“|”的或的方式组合使用。
表1
ios::in | 为输入(读)而打开文件 |
ios::out | 为输出(写)而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 所有输出附加在文件末尾 |
ios::trunc | 如果文件已存在则先删除该文件 |
ios::binary | 二进制方式 |
3、 文件的读写操作
由于类ofstream, ifstream 和fstream 是分别从ostream, istream 和iostream 中引申而来的,所以文件的读写操作与使用控制台函数cin和cout一样,“<<”表示对文件进行写操作,“>>”表示对文件进行读操作。
根据数据流读写的状态,有4个验证函数,它们分别是:
· bad()
如果在读写过程中出错,返回 true 。例如:当我们要对一个不是打开为写状态的文件进行写入时,或者我们要写入的设备没有剩余空间的时候。
· fail()
除了与bad() 同样的情况下会返回 true 以外,加上格式错误时也返回true ,例如当想要读入一个整数,而获得了一个字母的时候。
· eof()
如果读文件到达文件末尾,返回true。
· good()
这是最通用的:如果调用以上任何一个函数返回true 的话,此函数返回 false 。
4、 获得或者设置流指针
获得流指针的位置有两个函数,它们是
Long tellg() 和 long tellp()这两个成员函数不用传入参数,返回pos_type 类型的值(根据ANSI-C++标准) ,就是一个整数,代表当前get 流指针的位置 (用tellg) 或 put 流指针的位置(用tellp)。
设置流指针的位置根据输入输出流指针类型不同,也有两个函数,它们是:
seekg() 和seekp()这对函数分别用来改变流指针get 和put的位置。两个函数都被重载为两种不同的原型:
seekg ( pos_type position );
seekp ( pos_type position );
使用这个原型,流指针被改变为指向从文件开始计算的一个绝对位置。要求传入的参数类型与函数 tellg 和tellp 的返回值类型相同。
seekg ( off_type offset, seekdirdirection );
seekp ( off_type offset, seekdir direction );
使用这个原型可以指定由参数direction决定的一个具体的指针开始计算的一个位移(offset),它们如表2所示。
表2
ios::beg | 从流开始位置计算的位移 |
ios::cur | 从流指针当前位置开始计算的位移 |
ios::end | 从流末尾处开始计算的位移 |
调用函数close(),可以关闭流对象所指向的文件,释放流指针之后,那么该数据流就可以指向其它的文件进行操作了。
下面对文件一般的读写举个例子:
1)在文件末尾写入数据:假设mytext.tex文件中已经有了数据,如图1所示,然后在其末尾写入1到10的整数,运行结果如图2,代码如下。
#include "stdafx.h" #include<fstream> int _tmain(int argc, _TCHAR* argv[]) { std::ofstream openfile("d:\\myfile.txt", std::ios::app); for (int i = 1; i < 11; i++) { openfile << " " << i; } openfile.close(); return 0; }
图1
图2
2)对文件从新写入数据,只需要默认mode参数就可以了,本例是在例1)的文件mytext的基础上写入2到20的偶数,运行结果如图3,会发现本例的结果将例1)的结果覆盖了。
#include "stdafx.h" #include<fstream> int _tmain(int argc, _TCHAR* argv[]) { std::ofstream openfile("d:\\myfile.txt"); for (int i = 1; i < 11; i++) { openfile << " " << 2*i; } openfile.close(); return 0; }
图3
3)在文件中的指定位置写入数据:本例在例2)的mytex文件的内容中,在第11个数据位置写入11.运行结果如图4所示,在写入后获取当前位置,运行结果如图5所示。
#include "stdafx.h" #include<iostream> #include<fstream> #include<Windows.h> int _tmain(int argc, _TCHAR* argv[]) { std::ofstream openfile("d:\\myfile.txt",std::ios::in); long l = 11; openfile.seekp(l, std::ios::beg); openfile << 11; openfile.close(); long m = openfile.tellp(); std::cout << m << std::endl; Sleep(20000); return 0; }
图4
图5
4)读取文件中的数据:这里将文件mytext里面的数据读入到字符串中,并且显示出来,结果如图6所示。
#include "stdafx.h" #include<iostream> #include<fstream> #include<Windows.h> int _tmain(int argc, _TCHAR* argv[]) { char *filename = "d:\\myfile.txt"; std::ifstream inf(filename); if (!inf.is_open()) { std::cout << "Error opening file"; } while (!inf.eof()) { char d[256]; inf.getline(d,100); std::cout << d << std::endl; } Sleep(20000); return 0; }
图6
要是有帮助到亲的话,可不要忘了给皮皮点个赞呢
![](http://static.blog.csdn.net/xheditor/xheditor_emot/default/tongue.gif)
相关文章推荐
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- c++对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- C++中对文件进行读写操作
- Fileatream表示文件流,它能够打开和关闭文件,并对文件进行单字节的读写操作。 StreamReader和StreamWriter以文本方式对流进行读写操作。建立一个文本文件,分别使用上面两种方
- python对文件进行读写操作
- C/C++文件读写操作总结
- c++关于文件的读写操作
- C++ 文件读写操作