C++文件操作.docx
《C++文件操作.docx》由会员分享,可在线阅读,更多相关《C++文件操作.docx(8页珍藏版)》请在冰豆网上搜索。
![C++文件操作.docx](https://file1.bdocx.com/fileroot1/2022-12/7/5d973cdd-0f01-4b64-bd5c-f0506a34efad/5d973cdd-0f01-4b64-bd5c-f0506a34efad1.gif)
C++文件操作
【例1】编程将一些字符信息写入指定文本文件中。
#include
#include//一定要包含此头文件
#include
voidmain()
{
fstreamoutfile;//或ofstreamoutfile;
outfile.open("file1.dat",ios:
:
out);
if(!
outfile)
{
cout<<"file1.datcan'topen.\n";
abort();
}
//下面请注意往文本文件写字符流的语句!
outfile<<"thisisaprogram.\n";
outfile<<"thisisastring.";
outfile<<"\nok!
";
outfile.close();
}
【例2】编程序将【例1】中被写入文本文件中的字符信息读出并显示。
#include
#include
#include
voidmain()
{
fstreaminfile;//或ifstreamoutfile;
infile.open("file1.dat",ios:
:
in);
if(!
infile)
{
cout<<"file1.datcan'topen.\n";
abort();
}
chars[80];
while(!
infile.eof())
{
/*用成员函数getline(两个形参)从文本文件读取!
*/
infile.getline(s,sizeof(s));
cout<
}
infile.close();
}
【例3】编程使用get()函数和put()函数读、写文本文件。
特点是一次处理一个字符!
#include
#include
#include
#include
voidmain()
{
fstreamoutfile,infile;
//或ofstreamoutfile;ofstreaminfile;
outfile.open("file2.dat",ios:
:
out);
if(!
outfile)
{
cout<<"file2.datcan'topen.\n";
abort();
}
chars[]="IloveC++programing.";
for(inti=0;i<=(int)strlen(s);i++)
outfile.put(s[i]);//往文本文件中写一个字符
outfile.close();
infile.open("file2.dat",ios:
:
in);
if(!
infile)
{
cout<<"file2.datcan'topen.\n";
abort();
}
charch;
/*下面从文本文件中读取一个字符到字符变量ch中。
*/
while(infile.get(ch))
cout.put(ch);
cout<infile.close();
}
【例4】编程对一个二进制文件进行读/写操作。
#include
#include
#include
structperson
{
charname[80];//姓名
doubleheight;//身高
unsignedshortage;//年龄
}people[5]={"Ma",1.78,35,
"Zhang",1.68,24,
"Hu",1.90,40,
"Lu",1.89,50,
"Lang",2.00,18};
voidmain()
{
fstreamfile;
file.open("file4.dat",ios:
:
in|ios:
:
out|ios:
:
binary);
if(!
file)
{
cout<<"file4.datcan'topen.\n";
abort();
}
for(inti=0;i<5;i++)
file.write((char*)&people[i],sizeof(people[i]));
file.seekp(0,ios:
:
beg);
for(i=0;i<5;i++)
{
file.read((char*)&people[i],sizeof(people[i]));
cout<}
file.close();
}
【例5】按下列要求编写一个程序。
①该程序用来将一些大学生和硕士生的有关信息输入后存放在一个文件中。
②关于大学生的信息有:
姓名,学号,平均成绩。
③关于硕士生的信息有:
除了大学生应有信息外,再增加一个导师姓名。
④将一个大学生和两个硕士生的信息写入程序中,也可从键盘输入。
#include
#include
#include
#include
classStudent
{private:
charName[80];//姓名
unsigneduID;//学号
doublegrade;//平均成绩
public:
Student(char*pN,unsignednum,doubleg)
{
strcpy(Name,pN);
uID=num;
grade=g;
}
virtualvoidPrint(ostream&out);
friendostream&operator<<(ostream&out,Student&st);
};
voidStudent:
:
Print(ostream&out)
{
out<}
ostream&operator<<(ostream&out,Student&st)
{
st.Print(out);
out<returnout;
}
classMaster:
publicStudent
{private:
chardName[80];//导师姓名
public:
Master(char*pN,unsignednum,doubleg,char*pdN):
Student(pN,num,g)
{
strcpy(dName,pdN);
}
voidPrint(ostream&out);
};
voidMaster:
:
Print(ostream&out)
{
Student:
:
Print(out);
out<<""<}
voidmain()
{
ofstreamout("abc.txt");
Students1("Wangping",99001,96.5);
Masters2("Maguang",99056,84.8,"Hu");
Masters3("Jiangfang",99078,90.5,"Huang");
out<out<out<}
【例6】分析下列程序的输出结果,学会随机读/写数据文件的方法。
#include
#include
#include
voidmain()
{
fstreamfile("file5.dat",ios:
:
in|ios:
:
out|ios:
:
binary);
if(!
file)
{
cout<<"file5.datcan'topen.\n";
abort();
}
for(inti=1;i<=20;i++)
file.write((char*)&i,sizeof(int));
longpos=file.tellp();
cout<<"Currentbytenumber:
"<for(i=20;i<=50;i++)
file.write((char*)&i,sizeof(int));
file.seekp(pos);
file.read((char*)&i,sizeof(int));
cout<<"Thedatastoredis"<
file.seekg(0,ios:
:
beg);
for(i=50;i<=100;i++)
file.write((char*)&i,sizeof(int));
file.seekg(pos);
file.read((char*)&i,sizeof(int));
cout<<"Thedatastoredis"<
file.seekp(116,ios:
:
cur);
file.read((char*)&i,sizeof(int));
cout<<"Thedatastoredis"<
cout<<"Currentbytenumber:
"<}
【例7】分析下列程序的输出结果,熟悉成员函数seekp()的用法。
#include
#include
#include
voidmain()
{
structstudent
{
charname[50];
longnumber;
doubletotalscord;
}
stu[5]={"Ma",98001,89.5,"Li",98023,82.9,"Gao",98045,90.2,
"Hu",98066,92.1,"Yan",98067,79.5};
students1;
fstreamfile1;
file1.open("file6.dat",ios:
:
out|ios:
:
in|ios:
:
binary);
if(!
file1)
{
cout<<"file1.datcan'topen.\n";
abort();
}
for(inti=0;i<5;i++)
file1.write((char*)&stu[i],sizeof(student));
file1.seekp(sizeof(student)*4);
file1.read((char*)&s1,sizeof(stu[i]));
cout<file1.seekp(sizeof(student)*1);
file1.read((char*)&s1,sizeof(stu[i]));
cout<file1.close();
}