📂 文件操作
程序一关,内存里算好的结果就全没了,像黑板擦掉一样。想把它留到下次开机还能看,就得写进文件——就像把重要的事记进笔记本,合上再打开,字还在。
考纲知识点:文件重定向,读操作、写操作、读写操作
📖
考纲 · 知识点详述
摘自《CCF编程能力等级认证 C++&Python 认证标准》C++ 四级
- (10)掌握文件操作中的重定向,实现文件读写操作,了解文本文件的分类,掌握写操作、读操作、读写操作。
📚
先学一学
花 5 分钟读完下面 4 课,再去闯关就不慌啦
1
📓 为什么要文件:黑板会擦掉,笔记本不会
程序运行时,数据放在内存里。内存像一块黑板:开机黑板是空的,程序一边算一边往上写,可一关机,黑板就被擦得干干净净。想要数据下次开机还在,就要写进硬盘里的文件——像把黑板上的重要公式抄进笔记本,合上再打开,字还在。
🖥️ 平时程序从哪读、往哪写?
平时 cin 从键盘读入,cout 往屏幕输出。用文件操作后,可以让 cin 改从文件读、cout 改往文件写——输入输出换了个「水龙头」。
💡 口诀:内存=黑板(一关就空);文件=笔记本(关了还在)。
2
🔀 文件重定向:把输入输出「改道」到文件
考试和比赛里,数据常常放在文件里让程序读。最省事的办法是重定向:运行时用命令行告诉电脑「别从键盘读、别往屏幕写,改从文件读、往文件写」。
🧪 看命令行:把输入输出换成文件
看得懂就好,不用背:
./a.out < in.txt > out.txt
< in.txt 表示:程序要读键盘时,改从 in.txt 读;> out.txt 表示:程序要写屏幕时,改往 out.txt 写。
💡 口诀:小括号尖尖朝左 < 是「从文件进」,朝右 > 是「往文件出」。
🌟 行业实际:为什么要重定向
如果 1000 个测试数据要手动一个个敲键盘,人会累疯。工程师把测试数据提前存进文件,用重定向一次性喂给程序,再把答案自动存到另一个文件里比对——又快又不会错。
💡 口诀:数据放文件,< 读进去、> 写出来;自动批改不靠人。
3
🔧 读操作、写操作、读写操作
除了命令行重定向,程序里也能用 freopen 直接打开文件,告诉电脑接下来读哪个、写哪个:
🧪 读代码:把读入换成文件、输出存进文件
看得懂就好,不用背:
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
int a;
cin >> a; // 从 in.txt 读
cout << a * 2; // 写进 out.txt
freopen("out.txt", "w", stdout);
int a;
cin >> a; // 从 in.txt 读
cout << a * 2; // 写进 out.txt
第二个参数说明用途:"r" = read,只读(打开文件把内容读进来);"w" = write,只写(把内容写进文件,会先清空旧内容)。
💡 口诀:"r" 读(read)、"w" 写(write);先告诉电脑读写哪个文件,再用 cin/cout 就行。
📖 文本文件的分类
文件大致分两类:文本文件里面是能直接看懂的字和数字(用记事本打开能看到);二进制文件里面是电脑专用的 0/1 编码(图片、音乐、程序都是),人眼看不懂。四级主要处理文本文件,读写都很直白。
💡 口诀:文本=能直接读的字;二进制=电脑专用,人看不懂。
4
⚠️ 文件操作的规矩 & 行业实际
⚠️ 三个容易错的坑
① 用 "w" 写文件会把旧内容清空再写,别把重要数据覆盖了。
② 用 "r" 读一个不存在的文件会失败,程序就乱了,要先确认文件在。
③ 打开过的文件用完要关闭保存,像合上笔记本,不然数据可能没真正写进硬盘。
② 用 "r" 读一个不存在的文件会失败,程序就乱了,要先确认文件在。
③ 打开过的文件用完要关闭保存,像合上笔记本,不然数据可能没真正写进硬盘。
💡 口诀:写会清空、读要存在、用完关好;三步都做到,文件不出错。
🎮 行业实际:无处不在的存档
游戏进度、作文草稿、照片、歌单……全都是「文件」。工程师让程序退出前把状态写进文件、下次启动再读回来——你关掉游戏再打开还是满级,靠的就是文件读写的这套本事。
💡 口诀:读文件=翻开笔记本,写文件=记下新内容;存档全靠文件。
🎯
闯关小锦囊 · 考点提醒
- 内存像黑板关机就空;文件像笔记本关了还在,用来长期保存。
- 重定向:< in.txt 从文件读入、> out.txt 输出到文件。
- freopen("in.txt", "r", stdin) 只读;freopen("out.txt", "w", stdout) 只写。
- 文本文件人眼能读,二进制文件人看不懂;写 "w" 会清空旧内容,读 "r" 要文件存在。
- 用完文件要关闭保存;游戏存档、成绩单都靠文件读写。
🎮
学完了?来闯关!
下面 14 个小挑战,点一点就能玩
Demo 原型 · 每个知识点独立页面 · 暂不含真实编译与进度存储。