🎩 欢迎来到技术探索的奇幻世界👨💻
📜 个人主页:@一伦明悦-CSDN博客
✍🏻 作者简介: C++软件开发、Python机器学习爱好者
🗣️ 互动与支持:💬评论 ** 👍🏻点赞 ** 📂收藏 ** 👀关注+**
如果文章有所帮助,欢迎留下您宝贵的评论,点赞加收藏支持我,点击关注,一起进步!
**前言 **
** **在C++中,文件操作是一种重要的功能,它使程序能够读取和写入外部文件,从而实现数据的持久化存储和共享。以下是文件操作的几个重要作用:
** 数据存储和检索:** 文件操作允许程序将数据存储在文件中,以便在程序退出后仍然保留。这样可以实现数据的持久化,使得数据可以长期保存,并且可以在需要时重新加载到程序中。
** 数据共享:** 文件操作使得数据可以在不同的程序之间进行共享。一个程序可以将数据写入文件,而另一个程序可以从同一文件中读取相同的数据,从而实现数据的传递和共享。
** 配置文件和日志记录:** 文件操作常用于创建和读取配置文件,这些文件包含了程序的各种设置和参数。同时,文件操作还可用于记录程序的运行日志,以便在需要时进行故障排除和调试。
** 数据备份和恢复:** 通过文件操作,程序可以定期将数据写入文件作为备份,以防止数据丢失或损坏。在需要时,可以使用这些备份文件来恢复数据。
** 外部数据处理:** 文件操作允许程序处理外部文件中的数据,这些文件可能是由其他程序生成的,或者是用户提供的。这样可以实现数据的导入、导出和转换,以满足不同的需求和格式要求。
总的来说,文件操作是C++编程中的重要部分,它提供了一种灵活的方式来处理数据,并且可以与其他程序和系统进行交互,从而实现更广泛的功能和应用。
正文
**01-文件操作简介 **
** **在C++中,文件操作是通过标准库中的
<fstream>
头文件来实现的。文件操作可以分为两种类型:文本文件和二进制文件。文本文件是由字符组成的文件,可以使用文本编辑器打开和编辑,而二进制文件是由字节组成的文件,不能直接使用文本编辑器打开。
对于文件操作,主要有三大类操作:输入、输出和定位。下面将详细介绍这三大类操作在文本文件和二进制文件中的应用。
(1)文本文件操作
** 输入操作(ifstream):** 用于从文本文件中读取数据。通过创建
ifstream
对象并打开文件,然后使用输入运算符
>>
从文件中读取数据。代码如下:
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ifstream inFile("example.txt"); // 打开文件
int num;
inFile >> num; // 从文件中读取数据
cout << "Number read from file: " << num << endl;
inFile.close(); // 关闭文件
return 0;
}
** 输出操作(ofstream):** 用于向文本文件中写入数据。通过创建
ofstream
对象并打开文件,然后使用输出运算符
<<
向文件中写入数据。 代码如下:
#include <fstream>
using namespace std;
int main() {
ofstream outFile("example.txt"); // 打开文件
outFile << "Hello, World!"; // 向文件中写入数据
outFile.close(); // 关闭文件
return 0;
}
** 定位操作:** 对于文本文件,可以使用
seekg()
和
tellg()
函数来定位和获取当前文件指针的位置。 代码如下:
inFile.seekg(0, ios::beg); // 将文件指针移动到文件开头
int pos = inFile.tellg(); // 获取当前文件指针的位置
(2)二进制文件操作
** 输入操作(ifstream):** 与文本文件操作类似,但需要使用
read()
函数来读取二进制数据。 代码如下:
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ifstream inFile("example.bin", ios::binary); // 打开二进制文件
int num;
inFile.read(reinterpret_cast<char*>(&num), sizeof(int)); // 读取二进制数据
cout << "Number read from binary file: " << num << endl;
inFile.close(); // 关闭文件
return 0;
}
** 输出操作(ofstream):** 与文本文件操作类似,但需要使用
write()
函数来写入二进制数据。 代码如下:
#include <fstream>
using namespace std;
int main() {
ofstream outFile("example.bin", ios::binary); // 打开二进制文件
int num = 10;
outFile.write(reinterpret_cast<char*>(&num), sizeof(int)); // 写入二进制数据
outFile.close(); // 关闭文件
return 0;
}
** 定位操作:** 与文本文件操作类似,但使用的是
seekg()
和
tellg()
函数。 代码如下:
inFile.seekg(0, ios::beg); // 将文件指针移动到文件开头
int pos = inFile.tellg(); // 获取当前文件指针的位置
**02-文本文件简介 **
** **文本文件是由字符组成的文件,可以使用文本编辑器打开和编辑。在C++中,文本文件通常用于存储和处理以文本形式表示的数据。与二进制文件相比,文本文件更易于理解和处理,但在存储大量数据时可能会占用更多的空间。
一些常见的文本文件包括:
** 纯文本文件:** 只包含基本的文本内容,如.txt文件。
** 配置文件:** 存储程序的各种设置和参数,通常采用特定的格式,如.ini文件。
** 日志文件:** 记录程序运行时的各种信息和事件,方便后续排查和分析,如.log文件。
** 源代码文件:** 包含程序源代码的文件,如.cpp、.h文件等。
在C++中,可以使用输入流和输出流来读取和写入文本文件。读取文本文件时,通常会逐行读取文件内容,并将其解析为程序可以理解的数据格式。而写入文本文件时,则将数据按照一定的格式输出到文件中,以便其他程序或用户可以读取和理解。 总的来说,文本文件在C++编程中具有广泛的应用,是一种常见且易于处理的数据存储和交换格式。
(1)写文本文件
写文本文件是指将程序中的数据写入到文本文件中,以便长期保存或与其他程序共享。在C++中,可以使用输出流(ofstream)来实现写文本文件的操作。下面是对写文本文件的详细解释以及具体代码分析:
** 打开文件:** 首先,需要创建一个输出流对象并打开目标文件。可以使用ofstream类的构造函数来创建输出流对象,并指定文件名和打开模式。例如,
ofstream outFile("example.txt");
将创建一个名为example.txt的文件,并以写入模式打开它。
** 检查文件是否成功打开:** 在尝试写入文件之前,应该检查文件是否成功打开。可以使用成员函数is_open()来检查文件是否已成功打开。如果文件成功打开,则可以开始写入数据;如果打开失败,则可能是由于文件路径错误或者权限问题。
** 写入数据:** 使用输出流对象的插入运算符(<<)将数据写入到文件中。可以将各种数据类型(如字符串、数字等)直接写入文件中。例如,
outFile << "Hello, World!" << endl;
将字符串"Hello, World!"写入到文件中,并在末尾添加一个换行符。
** 关闭文件:** 在写入完所有数据后,应该关闭文件以释放资源并确保数据被正确写入到文件中。可以使用成员函数close()来关闭文件。在关闭文件之前,务必检查文件是否成功打开,以避免关闭一个未成功打开的文件。
下面是一个示例代码,演示了如何写入文本文件并进行错误处理:在这个示例中,程序尝试打开名为example.txt的文件,并将两行文本写入到文件中。如果文件成功打开,则会输出"Text file written successfully.“;否则,会输出"Unable to open file.” 表示文件打开失败。
#include <fstream>
#include <iostream>
using namespace std;
int main() {
ofstream outFile("example.txt"); // 打开文本文件
if (outFile.is_open()) { // 检查文件是否成功打开
outFile << "Hello, World!" << endl; // 写入数据到文件
outFile << "This is a text file." << endl;
outFile.close(); // 关闭文件
cout << "Text file written successfully." << endl;
} else {
cout << "Unable to open file." << endl; // 打开文件失败
}
return 0;
}
下面给出具体代码分析应用过程:这段代码演示了如何使用C++中的ofstream类来写入文本文件。这里简要分析一下:
** 包含头文件:** 使用了iostream和fstream头文件,iostream用于输入输出流,fstream用于文件操作。
** 创建流对象:** 创建了一个ofstream对象ofs,用于写入文件。
** 打开文件:** 使用open()函数打开文件,参数为文件名和打开方式。这里使用了ios::out打开方式,表示以写入模式打开文件。如果文件不存在,则创建新文件;如果文件已存在,则清空文件内容。
** 写入内容:** 使用流对象ofs的插入运算符(<<)将数据写入到文件中。这里写入了字符串"姓名: 张三"并在末尾添加了换行符endl。
** 关闭文件:** 使用close()函数关闭文件,释放资源。
#include <iostream>
using namespace std;
#include<fstream>
// 文本文件 写文件
void test01()
{
// 1、包含头文件 fstream
// 2、创建流对象
ofstream ofs;
// 3、打开方式
ofs.open("test.txt", ios::out); // out 打开时候写入文件 不指定路径,生成在项目同级目录
// 4、写入内容
ofs << "姓名: 张三" << endl;
// 5、关闭
ofs.close();
}
int main()
{
test01();
system("pause");
return 0;
得到的文本文件如下图所示:
(2)读文本文件
读取文本文件是指将文本文件中的内容读取到程序中,以便进行处理或显示。在C++中,可以使用输入流(ifstream)来实现读取文本文件的操作。下面是对读取文本文件的详细解释以及具体代码分析:
** 打开文件:** 首先,需要创建一个输入流对象并打开源文件。可以使用ifstream类的构造函数来创建输入流对象,并指定文件名和打开模式。例如,
ifstream inFile("example.txt");
将创建一个名为example.txt的文件,并以读取模式打开它。
** 检查文件是否成功打开:** 在尝试读取文件之前,应该检查文件是否成功打开。可以使用成员函数is_open()来检查文件是否已成功打开。如果文件成功打开,则可以开始读取数据;如果打开失败,则可能是由于文件路径错误或者权限问题。
** 读取数据:** 使用输入流对象的getline()函数或者其他读取函数来从文件中读取数据。getline()函数用于逐行读取文件内容,并将每行内容存储到一个字符串中。可以根据需要选择读取方式,比如按行读取或按字符读取。
** 关闭文件:** 在读取完所有数据后,应该关闭文件以释放资源。可以使用成员函数close()来关闭文件。
下面是一个示例代码,演示了如何读取文本文件并进行错误处理:在这个示例中,程序尝试打开名为example.txt的文件,并将文件内容逐行读取并输出。如果文件成功打开,则会输出"File read successfully.“;否则,会输出"Unable to open file.” 表示文件打开失败。
#include <fstream>
#include <iostream>
#include <string>
using namespace std;
void readFile(const string& filename) {
ifstream inFile(filename); // 打开文本文件
if (inFile.is_open()) { // 检查文件是否成功打开
string line;
while (getline(inFile, line)) { // 逐行读取文件内容
cout << line << endl; // 输出每一行内容
}
inFile.close(); // 关闭文件
cout << "File read successfully." << endl;
} else {
cout << "Unable to open file." << endl; // 打开文件失败
}
}
int main() {
readFile("example.txt"); // 读取名为example.txt的文件
return 0;
}
下面给出具体代码分析应用过程:这段代码演示了如何使用C++中的ifstream类来读取文本文件。以下是简要分析:
** 包含头文件:** 使用了iostream和fstream头文件,iostream用于输入输出流,fstream用于文件操作。
** 创建流对象:** 创建了一个ifstream对象ifs,用于读取文件。
** 打开文件:** 使用open()函数打开文件,参数为文件名和打开方式。这里使用了ios::in打开方式,表示以读取模式打开文件。
** 检查文件是否成功打开:** 使用is_open()函数检查文件是否成功打开,如果打开失败,则输出"文件打开失败"并返回。
** 读取内容方式:** 使用while循环结合输入运算符(>>)从文件中逐行读取内容,并将读取的内容输出到控制台。
** 关闭文件:** 使用close()函数关闭文件,释放资源。
#include <iostream>
using namespace std;
#include<fstream>
// 文本文件 写文件
void test01()
{
// 1、包含头文件 fstream
// 2、创建流对象
ifstream ifs;
// 3、打开方式
ifs.open("test.txt", ios::in); // in 打开时候读文件
// 判断打开 ifs.is_open() 返回的是一个布尔值
if (!ifs.is_open())
{
cout << "文件打开失败" << endl;
return;
}
// 4、读取内容方式
// 1、
char buf[1024] = { 0 };
while (ifs>>buf)
{
cout << buf << endl;
}
// 5、关闭
ifs.close();
}
int main()
{
test01();
system("pause");
return 0;
}
运行结果如下图所示:
**03-二进制文件简介 **
** **二进制文件是一种以二进制形式存储数据的文件,与文本文件相比,它们不使用可打印字符来表示数据,而是使用字节的二进制形式来存储。这意味着二进制文件可以存储任意类型的数据,包括文本、图像、音频、视频等。二进制文件通常以其特定的格式存储数据,这些格式可能是由特定的应用程序或标准定义的。
相对于文本文件,二进制文件的优点是: ** a、可以存储任意类型的数据,包括非文本数据。**
** b、通常比文本文件更加紧凑,因为它们不需要使用可打印字符来表示数据。**
二进制文件的一些常见用途包括: ** a、存储和读取程序状态或配置信息。**
** b、存储和传输多媒体数据,如图像、音频和视频文件。**
** c、存储和交换复杂的数据结构,如数据库文件或网络数据包。**
在C++中,可以使用文件流类(如ifstream和ofstream)来读写二进制文件。与文本文件不同,读写二进制文件时需要注意数据的二进制表示形式,以确保数据的正确性和完整性。二进制文件的格式通常由程序开发者自行定义,并且读写时需要严格按照定义的格式进行操作。
(1)写二进制文件
写入二进制文件是指将数据以二进制形式写入文件。在C++中,可以使用输出流(ofstream)来实现将数据写入二进制文件的操作。以下是写入二进制文件的详细解释以及具体代码分析:
** 打开文件:** 首先,需要创建一个输出流对象并打开目标二进制文件。可以使用ofstream类的构造函数来创建输出流对象,并指定文件名以及打开模式。例如,
ofstream outFile("example.bin", ios::binary);
将创建一个名为example.bin的二进制文件,并以二进制写入模式打开它。
** 将数据写入文件:** 使用输出流对象的write()函数来将数据写入二进制文件。write()函数需要传入要写入的数据的地址和字节数。可以将各种数据类型(如整数、浮点数、结构体等)转换为char*类型,然后使用write()函数将其写入文件。
** 关闭文件:** 在写入完所有数据后,应该关闭文件以释放资源。可以使用成员函数close()来关闭文件。
下面是一个示例代码,演示了如何将数据以二进制形式写入文件:在这个示例中,程序将两个Data结构体对象以二进制形式写入到名为example.bin的文件中。需要注意的是,在写入和读取二进制文件时,必顿时保持数据的二进制表示形式的一致性,以确保正确地读写数据。
#include <fstream>
#include <iostream>
using namespace std;
struct Data {
int id;
float value;
};
void writeBinaryFile(const string& filename) {
ofstream outFile(filename, ios::binary); // 打开二进制文件
if (outFile.is_open()) { // 检查文件是否成功打开
Data data1 = {1, 3.14};
Data data2 = {2, 2.718};
outFile.write(reinterpret_cast<char*>(&data1), sizeof(Data)); // 将data1写入文件
outFile.write(reinterpret_cast<char*>(&data2), sizeof(Data)); // 将data2写入文件
outFile.close(); // 关闭文件
cout << "Binary file written successfully." << endl;
} else {
cout << "Unable to open file." << endl; // 打开文件失败
}
}
int main() {
writeBinaryFile("example.bin"); // 写入到名为example.bin的二进制文件
return 0;
}
(2)读二进制文件
读取二进制文件是指从二进制文件中读取数据。在C++中,可以使用输入流(ifstream)来实现从二进制文件中读取数据的操作。以下是读取二进制文件的详细解释以及具体代码分析:
** 打开文件:** 首先,需要创建一个输入流对象并打开目标二进制文件。可以使用ifstream类的构造函数来创建输入流对象,并指定文件名以及打开模式。例如,
ifstream inFile("example.bin", ios::binary);
将创建一个名为example.bin的二进制文件,并以二进制读取模式打开它。
** 读取数据:** 使用输入流对象的read()函数来从二进制文件中读取数据。read()函数需要传入一个缓冲区的地址以及要读取的字节数。可以使用char数组作为缓冲区,并指定读取的字节数。
** 处理读取的数据:** 一旦数据被读取到缓冲区中,可以根据数据的类型进行相应的处理。如果读取的是基本数据类型(如整数、浮点数),可以直接将缓冲区中的数据转换为相应的类型。如果读取的是自定义类型(如结构体),则需要使用reinterpret_cast将缓冲区中的数据转换为相应的类型。
- 关闭文件: 在读取完所有数据后,应该关闭文件以释放资源。可以使用成员函数close()来关闭文件。
下面是一个示例代码,演示了如何从二进制文件中读取数据:在这个示例中,程序从名为example.bin的二进制文件中读取了两个Data结构体对象的数据,并将其打印到控制台上。需要注意的是,读取和写入二进制文件时必须保持数据的二进制表示形式的一致性,以确保正确地读写数据。
#include <fstream>
#include <iostream>
using namespace std;
struct Data {
int id;
float value;
};
void readBinaryFile(const string& filename) {
ifstream inFile(filename, ios::binary); // 打开二进制文件
if (inFile.is_open()) { // 检查文件是否成功打开
Data data1, data2;
inFile.read(reinterpret_cast<char*>(&data1), sizeof(Data)); // 从文件中读取data1
inFile.read(reinterpret_cast<char*>(&data2), sizeof(Data)); // 从文件中读取data2
cout << "Data 1: id = " << data1.id << ", value = " << data1.value << endl;
cout << "Data 2: id = " << data2.id << ", value = " << data2.value << endl;
inFile.close(); // 关闭文件
cout << "Binary file read successfully." << endl;
} else {
cout << "Unable to open file." << endl; // 打开文件失败
}
}
int main() {
readBinaryFile("example.bin"); // 从名为example.bin的二进制文件中读取数据
return 0;
}
总结** **
** **读写文本文件和二进制文件都是常见的文件操作,它们有着不同的特点和适用场景:
** 读写文本文件:**
** a、文本文件以可打印字符的形式存储数据,易于人类阅读和编辑。**
** b、文本文件通常用于存储文本数据,如配置文件、日志文件等。**
** c、在C++中,可以使用ifstream和ofstream类来读写文本文件。**
** d、读写文本文件时,数据以字符串的形式存储和处理,操作相对简单。**
** 读写二进制文件:**
** a、二进制文件以字节的二进制形式存储数据,不直接可读,适用于存储非文本数据,如图像、音频、视频等。**
** b、二进制文件通常比文本文件更加紧凑,因为它们不需要使用可打印字符来表示数据。**
** c、在C++中,可以使用ifstream和ofstream类来读写二进制文件,需要以二进制模式打开文件。**
** d、读写二进制文件时,需要严格保持数据的二进制表示形式的一致性,以确保正确地读写数据。**
总的来说,选择读写文本文件还是二进制文件取决于所处理的数据类型和需求。如果数据是文本形式且需要人类可读,通常使用文本文件;如果数据是非文本形式或需要更高效地存储,可以选择二进制文件。
版权归原作者 一伦明悦 所有, 如有侵权,请联系我们删除。