LogoCSP Wiki By Yundou
扩展阅读

文件操作

文件的概念

大家平时都用过笔记本,我们可以在笔记本上记录很多东西,比如日记、作业答案等。而且这些记录的内容不会因为我们合上笔记本就消失,下次打开还能看到。在电脑里,文件就像是笔记本,它可以存储各种各样的信息,像文字、图片、视频等。我们可以把数据写到文件里保存起来,也可以从文件里读取已经保存的数据。

freopen 实现文件读写

freopen 是C++里一个很有用的工具,它能让我们的程序和文件“对话”,也就是把程序里的数据写到文件里,或者从文件里读取数据到程序中。

freopen 函数的基本语法

freopen("文件名", "打开方式", 文件流);
  • “文件名”就是你要操作的文件的名字,比如 “test.txt”。
  • “打开方式”有好几种:
    • "r" 表示以只读的方式打开文件,也就是只能从文件里读取数据。
    • "w" 表示以写入的方式打开文件,如果文件不存在就创建一个新的,如果文件已经存在就把里面原来的内容清空。
    • "a" 表示以追加的方式打开文件,如果文件不存在就创建一个新的,如果文件已经存在就把新的数据添加到文件的末尾。
  • “文件流”通常用 stdin 表示标准输入(也就是从键盘输入),stdout 表示标准输出(也就是输出到屏幕)。

例题及示例代码

例题1:把数据写入文件

#include <iostream>
#include <cstdio>  // 使用freopen函数需要包含这个头文件
 
int main() {
    // 使用freopen函数以写入的方式打开文件test.txt
    // 把标准输出重定向到文件test.txt
    freopen("test.txt", "w", stdout);
 
    // 向文件里写入一句话
    std::cout << "这是写入文件的内容。" << std::endl;
 
    // 关闭文件,虽然freopen不需要手动关闭,但这样做是个好习惯
    fclose(stdout);
 
    return 0;
}

这段代码里,freopen("test.txt", "w", stdout); 把原本要输出到屏幕的内容,重定向到了 test.txt 文件里。所以 std::cout << "这是写入文件的内容。" << std::endl; 这句话的内容就会被写到 test.txt 文件中。

例题2:从文件里读取数据

#include <iostream>
#include <cstdio>  // 使用freopen函数需要包含这个头文件
 
int main() {
    // 使用freopen函数以只读的方式打开文件test.txt
    // 把标准输入重定向到文件test.txt
    freopen("test.txt", "r", stdin);
 
    // 定义一个字符串变量,用来存储从文件里读取的内容
    char str[100];
 
    // 从文件里读取一行内容到字符串str中
    std::cin.getline(str, 100);
 
    // 把读取到的内容输出到屏幕上
    std::cout << "从文件里读取的内容是: " << str << std::endl;
 
    // 关闭文件,虽然freopen不需要手动关闭,但这样做是个好习惯
    fclose(stdin);
 
    return 0;
}

在这个例子中,freopen("test.txt", "r", stdin); 把原本从键盘输入的数据,改成从 test.txt 文件里读取。所以 std::cin.getline(str, 100); 会从 test.txt 文件里读取一行内容到 str 字符串中,然后再把读取到的内容输出到屏幕上。

例题3:先写入数据,再读取数据

#include <iostream>
#include <cstdio>  // 使用freopen函数需要包含这个头文件
 
int main() {
    // 第一步:写入数据到文件
    // 使用freopen函数以写入的方式打开文件data.txt
    // 把标准输出重定向到文件data.txt
    freopen("data.txt", "w", stdout);
 
    // 向文件里写入两个整数
    std::cout << 10 << " " << 20 << std::endl;
 
    // 关闭文件,虽然freopen不需要手动关闭,但这样做是个好习惯
    fclose(stdout);
 
    // 第二步:从文件里读取数据
    // 使用freopen函数以只读的方式打开文件data.txt
    // 把标准输入重定向到文件data.txt
    freopen("data.txt", "r", stdin);
 
    // 定义两个整数变量,用来存储从文件里读取的整数
    int a, b;
 
    // 从文件里读取两个整数到变量a和b中
    std::cin >> a >> b;
 
    // 把读取到的两个整数相加
    int sum = a + b;
 
    // 输出相加的结果到屏幕上
    std::cout << "从文件里读取的两个数相加的结果是: " << sum << std::endl;
 
    // 关闭文件,虽然freopen不需要手动关闭,但这样做是个好习惯
    fclose(stdin);
 
    return 0;
}

这个例子结合了写入和读取操作。先把两个整数 1020 写入到 data.txt 文件中,然后再从这个文件里读取这两个整数,把它们相加后输出结果到屏幕上。

通过上面的讲解和例题,你应该对文件的概念和 freopen 函数的使用有了基本的了解。使用 freopen 函数可以很方便地实现文件的读写操作,这样我们就能把程序里的数据保存下来,或者使用已经保存好的数据。

On this page