文件读写
创建文件
• #include <fstream> // 包含头文件
•ofstream outFile(“clients.dat”,ios::out|ios::binary); //创建文件
– clients.dat” 要创建的文件的名字
• ios:out 输出到文件, 删除原有内容
• ios::app 输出到文件, 保留原有内容,总是在尾部添加
– ios::binary 以二进制文件格式打开文件
- ios: :in 以只读的方式打开
- ios::out 以写的方式打开
也可以先创建ofstream对象,再用 open函数打开 ofstream fout; fout.open(“test.out”,ios::out|ios::binary);
判断打开是否成功:
if(!fout){}
文件名可以给出绝对路径,也可以给相对路径。没有交代路径信息, 就是在当前文件夹下找文件
文件名的绝对路径和相对路径
绝对路径: "c:\\tmp\\mydir\\some.txt"
相对路径: "\\tmp\\mydir\\some.txt"
当前盘符的根目录下的tmp\dir\some.txt
"tmp\\mydir\\some.txt" 当前文件夹的tmp子文件夹
里面的….. "..\\tmp\\mydir\\some.txt" 当前文件
夹的父文件夹下面的tmp子文件夹里面的…..
"..\\..\\tmp\\mydir\\some.txt" 当前文件夹的父文件夹的父文件夹下面的tmp子文件夹里面的…..
文件的读写指针
写指针
ofstream fout("a1.out",ios::app); //以添加方式打开
long location = fout.**tellp()**; //取得写指针的位置
location = 10;
fout.seekp(location); // 将写指针移动到第10个字节处
fout.**seekp**(location,**ios::beg**); //从头数location
fout.seekp(location,**ios::cur**); //从当前位置数location
fout.seekp(location,**ios::end**); //从尾部数location
**• location 可以为负值**
读指针
ifstream fin(“a1.in”,**ios::ate**); //打开文件,定位文件指针到文件尾
long location = fin.**tellg()**; //取得读指针的位置 location = 10L;
fin.seekg(location); // 将读指针移动到第10个字节处
fin.seekg(location,ios::beg); //从头数location
fin.seekg(location,ios::cur); //从当前位置数location
fin.seekg(location,ios::end); //从尾部数location
**• location 可以为负值**
显示关闭文件
文件打开以后必须关闭
ifstream fin(“test.dat”,ios::in); fin.close();
ofstream fout(“test.dat”,ios::out); fout.close();
二进制文件读写
二进制读文件:
ifstream 和 fstream的成员函数:
istream& read (char* s, long n);
将文件读指针指向的地方的n个字节内容,读
入到内存地址s,然 后将文件读指针向后移动
n字节 (以ios::in方式打开文件时,文件读
指针开始指向文件开头) 。
二进制写文件
ofstream 和 fstream的成员函数:
istream& write (const char* s, long n);
将内存地址s处的n个字节内容,写入到文件中
写指针指向的位置, 然后将文件写指针向后
移动n字节(以ios::out方式打开文件时,文
件写指针开始指向文件开头, 以ios::app方式打
开文件时,文件写 指针开始指向文件尾部 )
在文件中写入和读取一个整数
#include <iostream>
#include <fstream>
using namespace std;
ofstream fout("some.dat", ios::out | ios::binary);
int x=120;
fout.write( (const char *)(&x), sizeof(int) );
fout.close();
ifstream fin("some.dat",ios::in | ios::binary);
int y;
fin.read((char * ) & y,sizeof(int)); //强制转换成char型;
fin.close();
cout << y <<endl; return 0;
从键盘输入几个学生的姓名的成绩,并以二进制文件形式保存
#include <iostream>
#include <fstream>
using namespace std;
struct Student {
char name[20];
int score; };
int main() {
Student s;
ofstream OutFile("c:\\tmp\\students.dat",ios::out|ios::binary);
while( cin >> s.name >> s.score )
OutFile.write( (char * ) & s, sizeof( s) ); OutFile.close();
return 0;