- #include <fstream>
- ofstream //文件写操作 内存写入存储设备
- ifstream //文件读操作,存储设备读区到内存中
- fstream //读写操作,对打开的文件可进行读写操作
打开文件的方式在ios类(所以流式I/O的基类)中定义,有如下几种方式:
ios::in | 为输入(读)而打开文件 |
ios::out | 为输出(写)而打开文件 |
ios::ate | 初始位置:文件尾 |
ios::app | 所有输出附加在文件末尾 |
ios::trunc | 如果文件已存在则先删除该文件 |
ios::binary | 二进制方式 |
- ofstream out;
- out.open("Hello.txt", ios::in|ios::out|ios::binary) //根据自己需要进行适当的选取
- ofstream out("...", ios::out);
- ifstream in("...", ios::in);
- fstream foi("...", ios::in|ios::out);
1.写入文件:
使用重载的插入操作符<<
- // writing on a text file
- #include <fiostream.h>
- int main () {
- ofstream out("out.txt");
- if (out.is_open())
- {
- out << "This is a line.\n";
- out << "This is another line.\n";
- out.close();
- }
- return 0;
- }
- //结果: 在out.txt中写入:
- This is a line.
- This is another line
2.从文件中读入数据:
- // reading a text file
- #include <iostream.h>
- #include <fstream.h>
- #include <stdlib.h>
- int main () {
- char buffer[256];
- ifstream in("test.txt");
- if (! in.is_open())
- { cout << "Error opening file"; exit (1); }
- while (!in.eof() )
- {
- in.getline (buffer,100);
- cout << buffer << endl;
- }
- return 0;
- }
eof():如果读文件到达文件末尾,返回true。
3.二进制文件
在二进制文件中,使用<< 和>>,以及函数(如getline)来操作符输入和输出数据,没有什么实际意义,虽然它们是符合语法的。
文件流包括两个为顺序读写数据特殊设计的成员函数:write 和 read。第一个函数 (write) 是ostream 的一个成员函数,都是被ofstream所继承。而read 是istream 的一个成员函数,被ifstream 所继承。类 fstream 的对象同时拥有这两个函数。它们的原型是:
write ( char * buffer, streamsize size );
read ( char * buffer, streamsize size );
read ( char * buffer, streamsize size );
这里 buffer 是一块内存的地址,用来存储或读出数据。参数size 是一个整数值,表示要从缓存(buffer)中读出或写入的字符数。
- // reading binary file
- #include <iostream>
- #include <fstream.h>
- const char * filename = "test.txt";
- int main () {
- char * buffer;
- long size;
- ifstream in (filename, ios::in|ios::binary|ios::ate);
- size = in.tellg();
- in.seekg (0, ios::beg);
- buffer = new char [size];
- in.read (buffer, size);
- in.close();
- cout << "the complete file is in a buffer";
- delete[] buffer;
- return 0;
- }
- //运行结果:
- The complete file is in a buffer