【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次“)

author:&Carlton

tag:C++

topic:【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次”)

website:黑马程序员C++

date:2023年7月31日


目录

文本文件

写文件

源代码        

文件情况

读文件

源代码

运行结果

二进制文件

写文件

源代码

文件情况

读文件

源代码

运行情况


文本文件

写文件

        1.引用文件操作头文件

        2.创建只写文件流对象

        3.打开文件并指定打开方式

        4.写数据

        5.关闭文件

源代码        

#include 
//1.引用文件操作头文件
#include 
using namespace std;

void test01()
{
	//2.创建只写文件流对象
	ofstream ofs;

	//3.打开文件并指定打开方式
	ofs.open("text.txt", ios::out);

	//4.写数据
	ofs << "姓名: 张三" << endl;
	ofs << "性别: 男" << endl;
	ofs << "年龄: 18岁" << endl;

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


int main()
{
	test01();
	return 0;
}

文件情况

        (保存在源文件所在同一最低级文件夹下)

        注意:冒号和文字间有空格

【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次“)_第1张图片

读文件

exit()函数与return()函数区别

        exit() 函数接受一个整数参数 status,表示程序的终止状态。一般来说,程序正常终止时可以返回 0,表示成功执行。其他非零的状态码可以用来表示不同的错误或异常情况


        调用 exit() 函数会立即终止程序的执行,并且不会执行之后的任何代码。它会执行一些清理工作(如关闭文件、释放内存等)后,直接返回操作系统

        需要注意的是,使用 exit() 函数会跳过析构函数的调用,因此可能导致一些资源没有被正确释放。在正常情况下,我们应该使用 return 语句来终止函数或程序,以保证资源的正确释放。 exit() 函数通常用于在出现严重错误或异常情况下终止程序。

源代码

#include 
#include 
#include 
using namespace std;

void test01()
{
	ifstream ifs;

	ifs.open("text.txt", ios::in);
	if (!ifs.is_open())
	{
		cout << "文件打开失败!" << endl;
		return;
		//或者使用exit(1);
/*
	exit() 函数接受一个整数参数 status,表示程序的终止状态。一般来说,程序正常终止时可以返回 0,表示成功执行。其他非零的状态码可以用来表示不同的错误或异常情况。
	调用 exit() 函数会立即终止程序的执行,并且不会执行之后的任何代码。它会执行一些清理工作(如关闭文件、释放内存等)后,直接返回操作系统。
	需要注意的是,使用 exit() 函数会跳过析构函数的调用,因此可能导致一些资源没有被正确释放。在正常情况下,我们应该使用 return 语句来终止函数或程序,以保证资源的正确释放。 exit() 函数通常用于在出现严重错误或异常情况下终止程序。
*/
	}

	//读文件
	
	//第一种方式
    //空格被当作字符串结束标志,单次循环结束,打印换行。        
	char buf1[1024] = { 0 };
	while (ifs >> buf1)
	{
		cout << buf1 << endl;
	}

	//第二种方式
    //以换行符为字符串结束标志(空格可以作为有效字符存在)
	char buf2[1024] = { 0 };
	while (ifs.getline(buf2, sizeof(buf2)))
	{
		cout << buf2 << endl;
	}

	//第三种方式
    //以换行符为字符串结束标志(空格可以作为有效字符存在)
	string buf3;
	while (getline(ifs,buf3))
	{
		cout << buf3 << endl;
	}

	//第四种方式
    //以换行符为字符串结束标志(空格可以作为有效字符存在)
	char c;
	while ((c = ifs.get()) != EOF)
	{
		cout << c;
	}

	ifs.close();
}

int main()
{
	test01();
	return 0;
}

运行结果

第一种读文件方式:

        空格被当作字符串结束标志,单次循环结束,打印换行。        

【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次“)_第2张图片

 其他方式:

        以换行符为字符串结束标志(空格可以作为有效字符存在)

【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次“)_第3张图片

        另外注意到四种读文件方式都执行但“文件只读一次”,因为文件位置标识符没有更新到文件开头。

二进制文件

写文件

源代码

#include 
#include 
using namespace std;

class Person
{
public:
	char m_name[50];
	int m_age;
};

void test01()
{
	Person p = {"张三",18};
	ofstream ofs;
	ofs.open("person.txt", ios::out | ios::binary);
	ofs.write((const char*) & p,sizeof(p));
	ofs.close();
}

int main()
{
	test01();
	return 0;
}

文件情况

【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次“)_第4张图片

读文件

源代码

#include 
#include 
using namespace std;

class Person
{
public:
	char m_name[50];
	int m_age;
};

void test01()
{
	ifstream ifs;
	ifs.open("person.txt", ios::in | ios::binary);
	if (!ifs.is_open())
	{
		cout << "文件打开失败!" << endl;
		return;
	}
	Person p;
	ifs.read((char*)&p, sizeof(p));
	cout << "姓名:" << p.m_name << endl;
	cout << "年龄:" << p.m_age << endl;
	ifs.close();
}

int main()
{
	test01();
	return 0;
}

运行情况

【C++】文件操作(囊括特殊情况:读文件遇到的空格被跳过、“文件只读一次“)_第5张图片

欢迎指正与分享,谢谢!

你可能感兴趣的:(C++,暑期实践,c++)