0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C++之文件操作

wang123a 来源:wang123a 作者:wang123a 2023-07-21 10:52 次阅读

C++中文件操作头文件:fstream

文件类型:文件文件和二进制文件

文件操作三大类:

ofstream 写操作
ifstream 读操作
fstream:读写操作

文件打开方式:

标志 说明
ios::in 只读
ios::out 只写,文件不存在则创建,存在则打开并截断原内容
ios::ate 打开一个已有的文件,并指向文件读指针指向文件尾,若文件不存在,则打开出错
ios::app 打开文件,从文件尾添加内容,若文件不存在则创建
ios::trunc 打开文件同时会截断原内容,单独使用时与ios::out相同
ios::binary 以二进制方式打开
ios::in|ios::out 打开文件,可读也可写,文件打开时原内容保持不变,若不存在则打开出错
ios::in|ios::out|ios::trunc 打开文件,可读写,会截断原内容,文件不存在则创建

1.文本方式写入示例

#include < iostream >
#include < fstream >
using namespace std;
int main()
{
	/*1.创建文件*/
	ofstream fp;
	fp.open("test.txt",ios::out);//创建文件,会截断原内容
	if (!fp.is_open())//文件打开失败返回false
	{
		cout < < "文件打开失败!" < < endl;
		return 0;
	}
	fp < < "C++文件操作示例!" < < endl;
	fp < < "写入数据测试" < < endl;
	fp < < "姓名:IT_阿水" < < "t工作方向:" < < "嵌入式开发" < < "t工作时间:" < < "6年" < < endl;
	fp.close();//关闭文件
	system("pause");
}

2.文本方式读取示例

C++中读取数据有多种方式实现。

2.1 示例1:重载>>读取

#include < iostream >
#include < fstream >
using namespace std;
int main()
{
	ifstream ifs;
	ifs.open("test.txt",ios::in);//只读方式打开
	if (!ifs.is_open())
	{
		cout < < "文件打开失败!" < < endl;
		return 0;
	}
	string str;
	while (ifs >> str)//以字符串方式读取
	{
		cout < < "str=" < < str < < endl;;
	}
	//关闭文件
	ifs.close();
	system("pause");
}

2.2 利用成员函数getline读取

#include < iostream >
#include < fstream >
using namespace std;
int main()
{
	ifstream ifs;
	ifs.open("test.txt",ios::in);//只读方式打开
	if (!ifs.is_open())
	{
		cout < < "文件打开失败!" < < endl;
		return 0;
	}
	//第二种:getline()
	char buff[1024];
	while (ifs.getline(buff, sizeof(buff)))
	{
		cout < < "buff=" < < buff < < endl;
	}
	//关闭文件
	ifs.close();
	system("pause");
}

2.3 单个字符方式读取get()

#include < iostream >
#include < fstream >
using namespace std;
int main()
{
	ifstream ifs;
	ifs.open("test.txt",ios::in);//只读方式打开
	if (!ifs.is_open())
	{
		cout < < "文件打开失败!" < < endl;
		return 0;
	}
	//第三种:单个字符方式读取
	char c;
	while ((c = ifs.get()) != EOF)
	{
		cout < < c;
	}
	//关闭文件
	ifs.close();
	system("pause");
}

3.二进制方式读写示例

  • 二进制数据写入文件
函数:write(const _Elem* _Str, streamsize _Count)
 形参:_Str --写入的内容的起始地址
       _Count  --写入的字节数
  • 二进制数据读取文件
read(_Elem* _Str, streamsize _Count) ;
 形参:_Str --读取内容存放缓冲区
       _Count --要读取的字节数
#include < iostream >
#include < fstream >
#include < cstring >
using namespace std;
class Person
{
public:
	Person() {}
	Person(const char* name, int age)
	{
		strcpy_s(this->name, name);
		this->age = age;
	}
	char name[20];//姓名
	int age;//年龄
};
int main()
{
	/*二进制写入数据示例*/
	fstream fs("test.doc", ios::out | ios::binary);
	if (!fs.is_open())
	{
		cout < < "文件创建失败" < < endl;
		return 0;
	}
	Person p("小王", 18);
	fs.write((const char *) & p, sizeof(p));//写入内容
	fs.close();//关闭文件
	/*二进制读取数据示例*/
	fs.open("test.doc", ios::in | ios::binary);
	if (!fs.is_open())
	{
		cout < < "文件打开失败" < < endl;
		return 0;
	}
	Person p2;
	fs.read((char *) & p2, sizeof(p2));
	cout < < "读取的内容:" < < endl;
	cout < < "姓名:" < < p2.name < < "t年龄:" < < p2.age < < endl;
	fs.close();
	system("pause");

}

4.C++指针偏移

C++文件指针偏移
  seekg(pos_type _Pos,ios_base::seekdir _Way)  --用于输入流,偏移位置指针到指定位置
  seekp(pos_type _Pos,ios_base::seekdir _Way)  --用于输出流,偏移位置指针到指定位置
	第一个参数:偏移量
	第二个参数:基于哪个位置
				ios::beg  --文件头
				ios::end  --文件尾
				ios::cur  --当前位置
  streamoff tellg()  --用于输入流,返回当前指针位置,streamoff 是一个long long类型
  streamoff tellp()  --用于输出流,返回当前指针位置
  返回值返回基于文件头的偏移量,字节为单位。失败则返回-1

示例:

#include < iostream >
#include < fstream >
using namespace std;
int main()
{
	ifstream fs;
	fs.open("test.txt", ios::in );//打开文件,不存在则打开失败,不会截断原内容
	if (!fs.is_open())
	{
		cout < < "文件打开失败" < < endl;
		return 0;
	}
	fs.seekg(0,ios::end);//将文件指针偏移到文件末尾
	char buff[1024];
	streamoff  size = fs.tellg();//获取文件大小
	cout < < "文件大小:" < < size < < "字节" < < endl;
	fs.seekg(0, ios::beg);//将输入流偏移到文件头
	while (fs >> buff)
	{
		cout < < buff < < endl;
	}
	fs.close();
	system("pause");
	return 0;
}
wKgZomS4_QKAcX2TAAPAXxnDagM496.png

5.C++中使用fopen系列函数示例

#define _CRT_SECURE_NO_DEPRECATE
#include < iostream >
using namespace std;
int main()
{
	cout < < "写入数据示例:" < < endl;
	string file = "1.txt";
	FILE* fp = fopen(file.c_str(),"w+b");
	if (fp == NULL)
	{
		cout < < "创建文件失败" < < endl;
	}
	char buff[] = "C语言格式文件读写操作示例!";
	size_t size=fwrite(buff,1,sizeof(buff),fp);
	cout < < "文件写入成功!size=" < < size < < endl;
	fclose(fp);
	cout < < "读取数据示例:" < < endl;
	fp = fopen(file.c_str(), "rb");
	if (fp == NULL)
	{
		cout < < "打开文件失败" < < endl;
	}
	char data[200];
	size=fread(data, 1, sizeof(data), fp);
	data[size] = '�';
	cout < < "读取内容:" < < data < < "t字节数:" < < size < < endl;
	fclose(fp);
	system("pause");
}
wKgZomS5FoKALLkTAASjGoeV-P4987.png


审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 函数
    +关注

    关注

    3

    文章

    4294

    浏览量

    62347
  • C++
    C++
    +关注

    关注

    21

    文章

    2104

    浏览量

    73461
  • 文件操作
    +关注

    关注

    0

    文章

    7

    浏览量

    5334
  • 头文件
    +关注

    关注

    0

    文章

    25

    浏览量

    9843
收藏 人收藏

    评论

    相关推荐

    C++STL算法(二)

    C++STL算法(二)
    的头像 发表于 07-18 14:49 955次阅读
    <b class='flag-5'>C++</b><b class='flag-5'>之</b>STL算法(二)

    c++STL算法(三)

    c++STL算法(三)
    的头像 发表于 07-18 15:00 1203次阅读
    <b class='flag-5'>c++</b><b class='flag-5'>之</b>STL算法(三)

    MSP430裸奔框架C++程序源码(菜农C++裸奔大法系列之一) 转载

    /*------------------------------------------------------------------------MSP430裸奔框架C++程序源码(菜农C++裸奔大法)本程序主要表现了
    发表于 02-01 11:06

    在main文件中怎样去使用C++

    ESP32 ESP-IDF 学习笔记(五 - 2)【使用C++的工程】文章目录ESP32 ESP-IDF 学习笔记(五 - 2)【使用C++的工程】1、导言2、在main
    发表于 01-07 07:44

    C/C++文件大全

    C/C++文件一览,一本很好的工具速查手册
    发表于 11-10 17:45 0次下载

    C++ Builder 操作ini文件读写

    C++ Builder 操作ini文件读写
    发表于 12-15 22:50 0次下载

    如何在C++代码中使用C文件

    。 12.3.1 在C++中使用系统C文件 要包括标准的系统 C文件,如 stdio.h,不必进行任何特殊
    发表于 10-19 09:24 3次下载

    高质量C++C编程指南资料说明

    每个 C++/C 程序通常分为两个文件。一个文件用于保存程序的声明(declaration),称为头文件。另一个
    发表于 03-14 08:00 2次下载

    虚拟机:使用cscope浏览C++文件

    cscope 本意是用来查看c文件的。但是也可以查看C++文件。方法如下:
    的头像 发表于 06-22 14:29 2080次阅读
    虚拟机:使用cscope浏览<b class='flag-5'>C++</b><b class='flag-5'>文件</b>

    C++操作符重载学习的总结

    操作符重载是c++的强大特性之一;操作符重载的本质是通过函数扩展操作符的功能;operator 关键字是实现操作符重载的关键。
    的头像 发表于 12-24 16:36 641次阅读

    LabVIEW教学数据文件操作

    LabVIEW教学数据文件操作说明。
    发表于 03-29 15:18 29次下载

    C++设计新思维-泛型编程与设计应用

    C++设计新思维-泛型编程与设计应用
    发表于 11-16 15:59 3次下载

    C++入门表达式

    C++中提供了很多操作符且定义了什么时候可以用于操作基本类型,其还允许我们定义用于操作class类型的操作符,接下来几篇文章将会介绍
    的头像 发表于 03-17 13:55 696次阅读

    C++学习笔记c++的基本认识

    自这篇文章我们即将开始C++的奇幻之旅,其内容主要是读C++ Primer的总结和笔记,有兴趣可以找原版书看看,对于学习C++还是有很大帮助的。这篇文章将从一个经典的程序开始介绍C++
    的头像 发表于 03-17 13:57 692次阅读

    C++之父新作带你勾勒现代C++地图

    为了帮助大家解决这些痛点问题,让大家领略现代C++美,掌握其中的精髓,更好地使用C++C++之父Bjarne Stroustrup坐不住了,他亲自操刀写就了这本《
    的头像 发表于 10-30 16:35 783次阅读
    <b class='flag-5'>C++</b>之父新作带你勾勒现代<b class='flag-5'>C++</b>地图