C++基础-文件操作
文件操作(输入输出流)
文件操作的概述
程序运行时产生的数据都属于零食数据,程序一旦运行结束,就会被释放
创新互联建站主要从事网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务丰县,10年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575
通过文件可以将数据持久化
C++中对文件的操作包含头文件
文件类型分为两种
- 文本文件:文件以文本的ASCII码的形式存储在计算机中
- 二进制文件:文件以文本的二进制形式存储在计算机中,用户一般不直接读他们
操作文件的三大类
- ofstream:读文件
- ifstream:写文件
- festream:读写文件
文本文件
写文件
步骤
-
包含头文件
#include
-
创建流对象
ofstream ofs;
-
打开文件
ofs.open("文件路径",打开方式);
-
写数据
ofs << "写入的数据";
-
关闭文件
ofs.cloSe()
打开方式
- 文件的打开方式可以配合使用,用|操作符(eg:los::binary | ios::in)
路径
- 没有指明路径的化,默认和当前项目的路径一致
- 可以用绝对,也可以用相对
例子
#include
#include //添加头文件
using namespace std;
void test01(){
ofstream ofs; //创建流对象
ofs.open("test.txt",ios::out); //打开的地址和方式
ofs << "你好" << endl; //文件的内容
ofs.close(); //关闭文件
}
int main(int argc, char** argv) {
test01();
return 0;
}
读文件
步骤相对于写文件多一点
步骤
-
包含头文件
#include
-
创建流对象
ifstream ifs;
-
打开文件并判断释放打开成功
ifs.open("文件路径",打开方式); if(!ifs.is_open()){ cout << "文件打开失败" << endl; return; }else{...}
-
读数据
一共四种...
-
关闭文件
ifs.cloSe()
例子
#include
#include
#include
using namespace std;
void test01(){
ifstream ifs;
ifs.open("test.txt",ios::in);
if(!ifs.is_open()){ //判断是否打开成功
cout << "文件打开失败" << endl;
return;
}else{
//第一种
// char buf[1024] = {0};
// while(ifs >> buf){ //将ifs的数据放入buf中,当数据读完时,返回false,结束循环(不读取数据)
// cout << buf <
小小练习-复制文件
在上面代码的基础上将已经创建好的test.txt文件复制到test1.txt文件下
#include //添加头文件
#include
#include
using namespace std;
void test01(){
ofstream ofs; //创建对象
ifstream ifs;
ifs.open("test.txt",ios::in); //路径和方式
ofs.open("test1.txt",ios::out);
if(!ifs.is_open()){ //复制过程
cout << "文件打开失败" << endl; //判断是否打开成功
return;
}else{
string buf;
while(getline(ifs,buf)){ //读文件
ofs << buf << "(test.txt复制成功)" << endl; //写(复制)文件
// 添加标识,判断复制是否成功
}
}
ofs.close(); //关闭文件
ifs.close();
}
int main(int argc, char** argv) {
test01();
return 0;
}
二进制文件
在以二进制读、写文件的时候要加多加一个‘ios::binary’
写文件
二进制方式读文件主要利用流对象调用函数write(读出的部分数据看不懂没有关系,只要还能读回来就可以啦)
函数类型:ofs.write((const char *) &buffer,int len);
参数解释:buffer指向内存中的一段数据;len是要读取的字节数
例子
#include
#include
using namespace std;
class Person{ //写个类读读
public:
char m_Name[64]; //最好用char
int m_Age;
};
void test01(){
ofstream ofs("Person.txt",ios::binary | ios::out); //可以一步写哦
//ofs.open("Person.txt",ios::binary | ios::out);
Person p = {"Tom" ,18}; //造个对象
ofs.write((const char*)&p,sizeof(p)); //用write函数读出来
ofs.close();
}
int main(int argc, char** argv) {
test01();
return 0;
}
读文件
二进制方式读文件主要利用流对象调用函数read
函数类型:ofs.read((const char *) &buffer,int len);
参数解释:buffer指向内存中的一段数据;len是要读取的字节数
例子
#include //是同一个Person,年龄是20咯(类哦)
#include //我把读的也写进来了,这样更灵活一点
using namespace std;
class Person{
public:
char m_Name[64];
int m_Age;
};
void test01(){
//写文件
ofstream ofs("Person.txt",ios::binary | ios::out); //可以一步写哦
//ofs.open("Person.txt",ios::binary | ios::out);
Person p = {"Tom" 20}; //改个对象的参数()
ofs.write((const char*)&p,sizeof(p));
ofs.close();
//读文件
ifstream ifs("Person.txt",ios::binary | ios::in);
if(!(ifs.is_open())){
cout << "文件打开失败" << endl;
return;
}else{
Person p;
ifs.read((char*)&p,sizeof(p));
cout << p.m_Name << p.m_Age <
为进一步验证是对同一个文件操作,可以做如下检验
else{
Person p = {"Petter",250};//再次修改
ifs.read((char*) &p,sizeof(p));
cout << p.m_Name << p.m_Age <
新闻名称:C++基础-文件操作
浏览地址:http://scyanting.com/article/dsoipje.html