【入门级-C++程序设计:12、文件及基本读写-文件重定向、文件读写等操作】

C++ 提供了强大的文件操作功能,主要包括文件重定向、文件读写等操作。下面我将详细介绍这些内容。
一、文件重定向
概念:是指将标准输入/输出流重定向到文件,而不是默认的控制台,这主要在命令行环境中使用,而不是直接在C++代码中实现。但在C++中,我们可以使用流重定向来实现类似功能,下面举例进行说明。

  1. 标准流重定向
    #include
    #include
    void redirect_stdout() {
    std::ofstream out(“output.txt”);
    // 保存原来的cout缓冲区
    auto old_buf = std::cout.rdbuf();
    // 重定向cout到文件
    std::cout.rdbuf(out.rdbuf());
    std::cout << “这将被写入文件而不是控制台\n”;
    // 恢复原来的cout缓冲区
    std::cout.rdbuf(old_buf);
    }

  2. 标准输入重定向
    void redirect_stdin() {
    std::ifstream in(“input.txt”);
    auto old_buf = std::cin.rdbuf();
    std::cin.rdbuf(in.rdbuf());
    std::string line;
    while (std::getline(std::cin, line)) {
    std::cout << "从文件读取: " << line << “\n”;
    }
    std::cin.rdbuf(old_buf);
    }

二、文件读写操作
C++ 使用 头文件进行文件操作,主要类包括:
ifstream:用于从文件读取数据
ofstream:用于向文件写入数据
fstream:既能读取文件数据,也能向文件写入数据

文件读写操作步骤
1、包含头文件
2、创建文件流对象
3、打开文件
4、检查文件是否成功打开
5、文件读写操作
6、关闭文件

举例说明
#include //包含头文件
#include
int main() {
std::ofstream outFile(“example.txt”); //创建文件流对象的同时打开文件
if (!outFile) { //检查文件是否成功打开
std::cerr << “文件打开失败” << std::endl;
return 1;
}
outFile << “第一行文本\n”; //文件写操作
outFile << “第二行文本\n”;
outFile << 12345 << “\n”;
outFile.close(); //关闭文件
return 0;
}

文件基本操作
1、写入文件
#include
#include
void write_to_file() {
// 创建输出文件流(覆盖模式)
std::ofstream out_file(“example.txt”);
if (out_file.is_open()) {
out_file << “这是第一行\n”;
out_file << “这是第二行\n”;
out_file << 12345 << “\n”;
out_file.close();
} else {
std::cerr << “无法打开文件\n”;
}
// 追加模式
std::ofstream append_file(“example.txt”, std::ios::app);
if (append_file.is_open()) {
append_file << “这是追加的内容\n”;
append_file.close();
}
}

2、读取文件
void read_from_file() {
std::ifstream in_file(“example.txt”);
std::string line;
if (in_file.is_open()) {
// 逐行读取
while (std::getline(in_file, line)) {
std::cout << line << “\n”;
}
in_file.close();
} else {
std::cerr << “无法打开文件\n”;
}
// 读取单个单词(空格分隔)
std::ifstream in_file2(“example.txt”);
std::string word;
while (in_file2 >> word) {
std::cout << "单词: " << word << “\n”;
}
in_file2.close();
}

3、二进制文件操作
void binary_file_operations() {
// 写入二进制数据
std::ofstream bin_out(“data.bin”, std::ios::binary);
int data[] = {1, 2, 3, 4, 5};
if (bin_out.is_open()) {
bin_out.write(reinterpret_cast<char*>(data), sizeof(data));
bin_out.close();
}
// 读取二进制数据
std::ifstream bin_in(“data.bin”, std::ios::binary);
int read_data[5];
if (bin_in.is_open()) {
bin_in.read(reinterpret_cast<char*>(read_data), sizeof(read_data));
bin_in.close();

    for (int i = 0; i < 5; ++i) {
        std::cout << read_data[i] << " ";
    }
    std::cout << "\n";
}

}

4、文件状态检查
void file_status_checks() {
std::fstream file(“test.txt”, std::ios::in | std::ios::out);
if (!file) {
std::cerr << “文件打开失败\n”;
return;
}
// 检查文件是否在结尾
if (file.eof()) {
std::cout << “到达文件末尾\n”;
}
// 检查是否出错
if (file.fail()) {
std::cerr << “操作失败\n”;
}
// 获取文件大小
file.seekg(0, std::ios::end);
std::streampos size = file.tellg();
std::cout << “文件大小: " << size << " 字节\n”;
file.seekg(0, std::ios::beg);
file.close();
}

5、文件操作模式
打开文件时可以指定不同的模式:
std::ios::in 打开用于读取
std::ios::out 打开用于写入
std::ios::binary 二进制模式
std::ios::ate 打开时定位到文件末尾
std::ios::app 追加模式,所有写入都在末尾
std::ios::trunc 如果文件存在,先截断
错误处理:
使用is_open()检查文件是否成功打开
通过流状态(good()、eof()、fail()、bad())判断操作结果

可以组合使用:
std::fstream file(“data.txt”, std::ios::in | std::ios::out | std::ios::binary);

6、文件位置操作
void file_positioning() {
std::fstream file(“data.txt”, std::ios::in | std::ios::out);
// 获取当前位置
std::streampos pos = file.tellg();
// 移动到文件开头
file.seekg(0, std::ios::beg);
// 移动到文件末尾
file.seekg(0, std::ios::end);
// 向前移动10字节
file.seekg(10, std::ios::cur);
// 向后移动5字节
file.seekg(-5, std::ios::cur);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

papership

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值