C++ 程序 从一个文件中读取内容并将其写入另一个文件
在 C++ 中,文件读写是非常基础且重要的操作,特别是在大型项目中。在本文中,我们将讨论如何从一个文件中读取内容并将其写入另一个文件。
打开文件
在 C++ 中,打开文件需要使用 fstream
类型的文件流,其定义如下:
#include <fstream>
std::fstream fileStream;
// 打开文件
fileStream.open(filePath, std::ios::in);
// 判断文件是否打开成功
if (!fileStream.is_open())
{
std::cout << "无法打开文件 " << filePath << "!" << std::endl;
return;
}
在打开文件之前,我们需要创建一个 fstream
对象,并对文件进行打开操作。在文件打开时,我们需要指定文件的路径和打开方式,打开方式包括:
std::ios::in
:以读取方式打开文件std::ios::out
:以写入方式打开文件std::ios::app
:以追加方式打开文件std::ios::binary
:以二进制方式打开文件
在打开文件后,我们需要判断文件是否打开成功,如果打开成功,将返回 true,否则将返回 false。
读取文件
在打开文件成功后,我们就可以开始读取文件了。在 C++ 文件读写中,可以分为字符读写和二进制读写。在本文中,我们只介绍字符读写。
字符读写的操作涉及到 get()
和 getline()
两个函数。其中,get()
函数会逐个读取文件中的字符,而 getline()
函数会一次读取一行文件内容。
// 逐个读取文件中的字符
char ch;
while (fileStream.get(ch))
{
// 处理文件内容
}
// 一次读取一行文件内容
std::string line;
while (std::getline(fileStream, line))
{
// 处理文件内容
}
在 get()
函数中,每次读取一个字符,并将其存储在 char
类型的变量中。而在 getline()
函数中,每次读取一行文件内容,并将其存储在 std::string
类型的变量中。
写入文件
在读取文件内容之后,我们需要将其写入另一个文件中。在 C++ 文件读写中,写入操作使用 put()
和 write()
两个函数。其中,put()
函数用于写入单个字符,而 write()
函数用于写入字符串或二进制数据。
// 写入单个字符
std::ofstream outFileStream;
outFileStream.open(outFilePath, std::ios::out);
char ch = 'a';
outFileStream.put(ch);
outFileStream.close();
// 写入字符串或二进制数据
std::ofstream outFileStream;
outFileStream.open(outFilePath, std::ios::out);
std::string data = "Hello world!";
outFileStream.write(data.c_str(), data.size());
outFileStream.close();
在 put()
函数中,我们需要将要写入的字符作为参数传入函数中。而在 write()
函数中,需要将要写入的字符串或二进制数据的指针和大小作为参数传入函数中。
完整程序
下面是一个完整的程序示例,从一个文件中读取内容并将其写入另一个文件中。
#include <iostream>
#include <fstream>
int main(int argc, char *argv[])
{
if (argc < 3)
{
std::cout << "用法:" << argv[0] << " <输入文件> <输出文件>" << std::endl;
return -1;
}
std::string filePath(argv[1]);
std::string outFilePath(argv[2]);
// 打开文件
std::fstream fileStream;
fileStream.open(filePath, std::ios::in);
// 判断文件是否打开成功
if (!fileStream.is_open())
{
std::cout << "无法打开文件 " << filePath << "!" << std::endl;
return -1;
}
// 逐行读取文件内容
std::string line;
std::string content;
while (std::getline(fileStream, line))
{
content += line + "\n";
}
// 写入文件
std::ofstream outFileStream;
outFileStream.open(outFilePath, std::ios::out);
if (!outFileStream.is_open())
{
std::cout << "无法打开文件 " << outFilePath << "!" << std::endl;
return -1;
}
outFileStream.write(content.c_str(), content.size());
fileStream.close();
outFileStream.close();
std::cout << "已将文件 " << filePath << " 内容写入文件 " << outFilePath << " 中" << std::endl;
return 0;
}
该程序将从终端读取两个参数,分别为输入文件和输出文件的路径,然后打开输入文件,并逐行读取文件内容,最后将文件内容写入输出文件中。在程序运行结束后,将会输出写入成功的信息。
总结
在本文中,我们讨论了如何从一个文件中读取内容并将其写入另一个文件的 C++ 程序。在程序中,我们使用了 fstream
类型的文件流,并借助 get()
、getline()
、put()
和 write()
函数完成了文件读写操作。如果你想在 C++ 中学习更多有趣的操作,可以参考 C++ 教程的其他题目。