c++文件操作

目录

前言:

对于输入输出流解释:

为什么要学习文件操作?有什么用?

分类:

分为文本文件和二进制文件

操作文件的三大类流

ofstream:

ifstream:

fstream:

⭐对于文件流对象的解读

1.文本文件:

1.1如何写文件?

文件打开方式:

代码示例:

如何查看文件?

1.2如何读文件?

文件读取的方式:

方法一:

方法二:

方法三:

2.二进制文件 

2.1写文件

步骤:

⭐利用流对象调用write函数

代码示例:

2.2读取文件

代码示例:

总结:


前言:

对于输入输出流解释:

在C++中,输入输出是同流来完成的。

输出操作将一个对象的状态转换成一个字符序列,输出到某个地方。

输入操作也是从某个地方接收到一个字符序列,然后将其转换成一个对象的状态所要求的格式。

这整个操作就像数据在流动,因此我们把接收输出数据的地方目标,把输入数据的来源称作

因此我们可以把输入和输出操作看成字符序列在源、目标以及对象之间的流动

为什么要学习文件操作?有什么用?

因为大部分数据临时数据,在程序执行完毕会销毁,有时候需要有一些重要数据保存,所以需要在文件里进行保存

通过文件使数据持久化,而文件操作时要包含一个头文件——>

分类:

分为文本文件和二进制文件

文本文件是文件以ASCII码的形式存储在计算机中

二进制文件数据以二进制形式存储在计算机中,用户一般不能读懂,但是可以正常读取出来

操作文件的三大类流

在c++中文件操作就是通过流来完成的。

C++总共有输入文件流输出文件流以及输入输出文件流3种。

要打开一个输出文件流,要定义一个ofstream的类型的对象

要打开一个输入文件流,要定义一个ifstream的类型的对象
要打开输入输出文件流,要定义一个
fstream的类型的对象

ofstream:

用于写操作,简单来说就是创造这样一个流对象,用于写操作

ifstream:

用于读操作,——>创建一个用于读操作的流对象,

fstream:

用于读写操作(这个看上面两个就好理解了(●'◡'●)

⭐对于文件流对象的解读

一个输出流对象是信息流动的目标
一个
输入流对象是数据流动的源头
一个iostream对象既可以是数据流动的源也可以是信息流动的目标

1.文本文件:

1.1如何写文件?

1.程序要包含头文件

2.创建一个流对象,例如:ofstream ofs;

3.打开文件  ofs.open(“文件路径”,打开方式)

(这里的文件路径可以只简单写一个test.txt,或者是写一个详细地址比如D:/test.txt)

4.写数据  ofs<<"写入的数据"<

(这里也可以不写endl)

5.关闭文件  ofs.close();

这个非常重要,不要忘了

文件打开方式:

ios::in          →         仅可读文件

ios::out        →         仅可写文件

ios::ate        →         初始位置为文件的尾部

ios::app       →         追加写入文件

ios::trunc     →   ​​​​​​​      如果文件原本存在那么先删除再创建

ios::binary   →     ​​​​​​​    二进制方式

注意:二进制文件打开方式可以配合使用"|"操作符

例如:用二进制的方式写文件ios::binary|ios::out

这样可以两种该方法一起使用

代码示例:

#define  _CRT_SECURE_NO_WARNINGS
#include
using namespace std; 
#include
 
void test1()
{
    ofstream ofs;//o——output输出,f——file文件,stream——流
    ofs.open("test.txt", ios::out);//不指定就和项目的地址一样了
    ofs << "你好啊" << endl;
    ofs << "你叫什么啊" << endl;
    ofs << "你在哪里啊" << endl;
    ofs << "哈哈" << endl;
    ofs.close();
}

int main()
{
    test1();
    system("pause");
    return 0;
}

如何查看文件?

1.右键点击c++文件操作_第1张图片

2.点击打开所在的文件夹

3.程序运行结束后,你会在这个文件夹下面看到你新建打开的文件

c++文件操作_第2张图片

1.2如何读文件?

⭐要创建的流对象是ifstream

⭐如何判断文件是否可以打开成功

⭐函数功能简介(最常用的是最后一个)

函数 功能简介
bad() 如果进行非法操作,返回true,否则返回false
clear() 设置内部错误状态,如果用缺省参量调用则清除所有错误位
eof() 如果提取操作已经到达文件尾,则返回true,否则返回false
good() 如果没有错误条件和没有设置文件结束标志,返回true,否则返回false
fail() 与good相反,操作失败返回false,否则返回true
is_open() 判定流对象是否成功地与文件关联,若是,返回true,否则返回false,这个可以判断文件是否成功打开
代码示例(文件读取的3种方法):
#define  _CRT_SECURE_NO_WARNINGS
#include
#include//注意这里不要写它这个是旧的C 头文件,对应的是基于char*的字符串处理函数
#include
using namespace std; 

void test1()
{
    ifstream ifs;
    ifs.open("test.txt",ios::in);
    if (!ifs.is_open()) {
        cout << "打开文件失败,请检查是否有错误"<>遇到空格会结束读入,读到空的时候它自动给你换行,这也是为什么最后总会空一行的原因
    //while(ifs>>a) {//利用while循环把数据读到数组中
    //    cout << a << endl;
    //}
    //2.方法
    //char a[1000] = { 0 };
    //while (ifs.getline(a, sizeof(a))) 
    //{
    //    cout << a << endl;
    //}
    //3.方法
    string a;
    while (getline(ifs, a))
    {
        cout << a << endl;
    }
    ifs.close();
}

int main()
{
    test1();
    system("pause");
    return 0;
}

c++文件操作_第3张图片

这里介绍3个方法,熟练运用一个就可以完成文件读取

文件读取的方式:

方法一:
1.方法
char a[9999] = { 0 };//>>遇到空格会结束读入,读到空的时候它自动给你换行,这也是为什么最后总会空一行的原因
while(ifs>>a) 
{//利用while循环把数据读到数组中
   cout << a << endl;
}
方法二:
2.方法
char a[1000] = { 0 };
while (ifs.getline(a, sizeof(a))) 
{
   cout << a << endl;
}
方法三:
3.方法
string a;
while (getline(ifs, a))
{
    cout << a << endl;
}

2.二进制文件 

如何用二进制的方式对这个文件进行读写操作?

打开方式用ios::binary

注意:读出来为乱码但是文件看不懂没关系

2.1写文件

二进制可以操作很多数据类型

步骤:

先写头文件,再创建一个流对象,然后以写入的方式打开二进制文件,写入内容,关闭文件

⭐利用流对象调用write函数

用write函数,要使用强制类型转换为const char*

const  char*类型就是常量字符串,例如"你好哈哈"就是常量字符串,const就是只可读,以防止源文件被改

代码示例:

void test1() {
	ofstream o; //创建流对象
	o.open("testbin.txt", ios::out | ios::binary);  //二进制方式打开
    //这里上面12步可以合为一步
    //ofstream ofs("person.txt", ios::out | ios::binary);
	Person p = { "小红",12 }; 
	//把对象写入到o
	o.write((const char*)&p, sizeof(p));
	//关闭文件
	o.close();
}

2.2读取文件

利用流对象去调用成员函数为read

函数原型为:istream &read(char *buffer,int len);

buffer指字符指针,指向内存的一段存储空间,len为读写的字节数

代码示例:

#define  _CRT_SECURE_NO_WARNINGS
#include
#include
using namespace std; 
//避免用string,因为string实际上是一个类而不是类型,实现的东西有限
class person
{
public:
    char m_name[12];
    int m_age;

};
void test1()
{
    //包含头文件
    //创建流对象
    ifstream ifs;
    //打开文件
    ifs.open("person.txt", ios::in | ios::binary);
    if (!ifs.is_open()) {
        cout << "文件打开错误" << endl;
        return;
    }
    //读取文件
    person p;
    ifs.read((char*)&p, sizeof(person));//这里不用const,因为读取文件不需要防止更改文件内容
    cout << "年龄:"<

总结:

有关文件操作的内容就介绍完毕,感谢浏览,欢迎点赞收藏专栏,如有错误,请大佬指正,谢谢

你可能感兴趣的:(c/c++,c++,开发语言)