当前位置: 首页 > news >正文

C++学习之路(五)C++ 实现简单的文件管理系统命令行应用 - 示例代码拆分讲解

简单的文件管理系统示例介绍:

这个文件管理系统示例是一个简单的命令行程序,允许用户进行文件的创建、读取、追加内容和删除操作。这个示例涉及了一些基本的文件操作和用户交互。

在这里插入图片描述

功能概述:

  1. 创建文件 (createFile()):

    • 用户可以输入文件名和内容,创建新的文件。
  2. 读取文件 (readFile()):

    • 用户可以输入文件名,读取并显示文件的内容。
  3. 追加文件内容 (appendToFile()):

    • 用户可以输入文件名和内容,将新内容追加到已存在的文件末尾。
  4. 删除文件 (deleteFile()):

    • 用户可以输入文件名,删除指定的文件。

涉及的知识点:

  1. 文件输入输出 (<fstream>):

    • 使用 std::ifstreamstd::ofstream 实现文件读取和写入功能。
  2. 文件流的打开和关闭:

    • is_open()close() 函数用于检查文件流是否打开以及关闭文件。
  3. 命令行交互:

    • 使用 std::cinstd::cout 实现与用户的交互。
  4. 文件操作函数:

    • std::remove() 函数用于删除文件。
  5. 循环和条件语句:

    • 使用 do-while 循环处理菜单选项,根据用户输入的选择执行相应的功能。

通过这个示例,初学者可以了解如何使用 C++ 实现基本的文件操作、用户交互和函数封装,以及如何处理文件的创建、读取、追加和删除等操作。同时也涉及了条件语句、循环等基本的程序控制结构。

示例在Clion中运行步骤:

1. 新建项目

在这里插入图片描述

2. 粘贴代码
#include <iostream>
#include <fstream>
#include <string>void createFile() {std::string filename, content;std::cout << "Enter filename: ";std::cin >> filename;std::ofstream file(filename);if (file.is_open()) {std::cout << "Enter file content (type 'end' to finish):\n";while (true) {std::cin.ignore(); // Ignore newline character from previous inputstd::getline(std::cin, content);if (content == "end") {break;}file << content << std::endl;}file.close();std::cout << "File created successfully!" << std::endl;} else {std::cout << "Error! Unable to create file." << std::endl;}
}void readFile() {std::string filename, line;std::cout << "Enter filename to read: ";std::cin >> filename;std::ifstream file(filename);if (file.is_open()) {std::cout << "File content:" << std::endl;while (std::getline(file, line)) {std::cout << line << std::endl;}file.close();} else {std::cout << "Error! Unable to open file." << std::endl;}
}void appendToFile() {std::string filename, content;std::cout << "Enter filename to append: ";std::cin >> filename;std::ofstream file(filename, std::ios::app);if (file.is_open()) {std::cout << "Enter content to append (type 'end' to finish):\n";while (true) {std::cin.ignore(); // Ignore newline character from previous inputstd::getline(std::cin, content);if (content == "end") {break;}file << content << std::endl;}file.close();std::cout << "Content appended to file successfully!" << std::endl;} else {std::cout << "Error! Unable to open file." << std::endl;}
}void deleteFile() {std::string filename;std::cout << "Enter filename to delete: ";std::cin >> filename;if (std::remove(filename.c_str()) != 0) {std::cout << "Error! Unable to delete file." << std::endl;} else {std::cout << "File deleted successfully!" << std::endl;}
}int main() {char choice;do {std::cout << "\nFile Management System\n";std::cout << "1. Create File\n";std::cout << "2. Read File\n";std::cout << "3. Append to File\n";std::cout << "4. Delete File\n";std::cout << "5. Exit\n";std::cout << "Enter your choice: ";std::cin >> choice;switch (choice) {case '1':createFile();break;case '2':readFile();break;case '3':appendToFile();break;case '4':deleteFile();break;case '5':std::cout << "Exiting...\n";break;default:std::cout << "Invalid choice!\n";break;}} while (choice != '5');return 0;
}
3. 编译运行

在这里插入图片描述


代码拆解,知识点总结

当我们拆分讲解这个文件管理系统示例时,可以按照功能模块来逐步解释每个部分的作用和实现。

🟥 1. 创建文件功能 (createFile()):

void createFile() {std::string filename, content;std::cout << "Enter filename: ";std::cin >> filename;std::ofstream file(filename);// 检查文件是否成功打开if (file.is_open()) {std::cout << "Enter file content (type 'end' to finish):\n";while (true) {std::cin.ignore(); // 忽略上一个输入中的换行符std::getline(std::cin, content);if (content == "end") {break;}file << content << std::endl;}file.close();std::cout << "File created successfully!" << std::endl;} else {std::cout << "Error! Unable to create file." << std::endl;}
}
  • 这个函数允许用户输入文件名和内容,在给定的文件名下创建文件并将用户输入的内容写入文件。
  • 使用 std::ofstream 打开文件,使用 file.is_open() 检查文件是否成功打开,然后读取用户输入的内容,并将内容写入文件。

🟥 2. 读取文件功能 (readFile()):

void readFile() {std::string filename, line;std::cout << "Enter filename to read: ";std::cin >> filename;std::ifstream file(filename);// 检查文件是否成功打开if (file.is_open()) {std::cout << "File content:" << std::endl;while (std::getline(file, line)) {std::cout << line << std::endl;}file.close();} else {std::cout << "Error! Unable to open file." << std::endl;}
}
  • 这个函数允许用户输入文件名,然后打开文件并将文件内容逐行读取并显示在屏幕上。

🟥 3. 追加文件内容功能 (appendToFile()):

void appendToFile() {std::string filename, content;std::cout << "Enter filename to append: ";std::cin >> filename;std::ofstream file(filename, std::ios::app);// 检查文件是否成功打开if (file.is_open()) {std::cout << "Enter content to append (type 'end' to finish):\n";while (true) {std::cin.ignore(); // 忽略上一个输入中的换行符std::getline(std::cin, content);if (content == "end") {break;}file << content << std::endl;}file.close();std::cout << "Content appended to file successfully!" << std::endl;} else {std::cout << "Error! Unable to open file." << std::endl;}
}
  • 这个函数允许用户输入文件名和内容,在给定的文件名下打开文件,并在文件末尾追加用户输入的内容。

📢 Tips: std::getline() 是什么意思?

std::getline() 是 C++ 标准库 <string> 头文件中的函数,用于从输入流中获取一行文本并存储到字符串中。

  • std::getline() 接受两个参数:输入流和字符串。
  • 它从输入流(在这个例子中是 std::cin,标准输入)中读取一行文本,并将读取的内容存储到字符串 line 中,直到遇到换行符 \n 或文件结束符。
  • 这个函数能够读取整行文本,包括空格和制表符等,直到换行符为止。

std::getline() 的特点:

  1. 读取整行文本: 不像 std::cin >> variable 会在遇到空格或换行符时停止读取,std::getline() 会读取整行文本。

  2. 可以指定定界符(可选): 可以传递第三个参数作为定界符,以指定特定的字符作为终止符号,例如 std::getline(std::cin, line, '\t') 将在遇到制表符时停止读取。

  3. 常用于读取用户输入: 在命令行交互中,特别适用于读取用户输入的完整一行文本,例如文件名、描述等信息。

std::getline() 是处理输入流中文本数据时常用的函数,能够方便地读取整行文本并存储到字符串中,适用于许多交互式的输入场景。


🟥 4. 删除文件功能 (deleteFile()):

void deleteFile() {std::string filename;std::cout << "Enter filename to delete: ";std::cin >> filename;// 删除文件if (std::remove(filename.c_str()) != 0) {std::cout << "Error! Unable to delete file." << std::endl;} else {std::cout << "File deleted successfully!" << std::endl;}
}
  • 这个函数允许用户输入文件名,然后尝试删除该文件。

🟥 5. 主函数 (main()):

主函数提供了用户和程序的交互菜单,根据用户的选择调用相应的功能函数。

整个程序通过以上几个模块,实现了文件的创建、读取、追加和删除等功能,并通过命令行菜单和用户输入来控制程序的执行。

Tips: 📢 别忘了跑起来,检查检查有没有BUG ~ 😁


本文就到这里了,感谢您的阅读,明天还有更多的实例学习文章等着你 🎆。别忘了点赞、收藏~ Thanks♪(・ω・)ノ 🍇。

相关文章:

C++学习之路(五)C++ 实现简单的文件管理系统命令行应用 - 示例代码拆分讲解

简单的文件管理系统示例介绍: 这个文件管理系统示例是一个简单的命令行程序&#xff0c;允许用户进行文件的创建、读取、追加内容和删除操作。这个示例涉及了一些基本的文件操作和用户交互。 功能概述&#xff1a; 创建文件 (createFile())&#xff1a; 用户可以输入文件名和内…...

Node.js下载安装及配置镜像源

一、进入官网地址下载安装包 https://nodejs.org/dist 选择对应你系统的Node.js版本 这里我选择的是Windows系统、64位 二、安装程序 &#xff08;1&#xff09;下载完成后&#xff0c;双击安装包&#xff0c;开始安装Node.js (2)直接点【Next】按钮&#xff0c;此处可根据…...

RAC 下expdp impdp 并行 parallel FK

1. dump 文件非共享下的并行 Customer receives the following errors: ORA-31693: Table data object "<SCHEMA_NAME>"."<TABLE_NAME>" failed to load/unload and is being skipped due to error: ORA-31617: unable to open dump file &qu…...

【数据结构】动态顺序表详解

目录 1.顺序表的概念及结构 2.动态顺序表的实现 2.1创建新项目 2.2动态顺序表的创建 2.3接口的实现及测其功能 2.3.1初始化 2.3.2尾插 2.3.3头插 2.3.4尾删&头删 2.3.5打印&从任意位置插入 2.3.6删除任意位置的数据 2.3.7查找 2.3.8销毁顺序表 3.结语 He…...

Nginx代理https请求的操作过程

理论很简单&#xff0c;过程很曲折&#xff0c;版本适配的问题要小心。 场景&#xff1a; 要和前端进行联调&#xff0c;我本地后端用了https&#xff0c;证书是自制的&#xff0c;主要是页面里面有一些oauth2认证的地方&#xff0c;需要跳转。 比如https://aaa.com/profile.h…...

Linux 面试题(一)

目录 1、绝对路径用什么符号表示&#xff1f;当前目录、上层目录用什么表示&#xff1f;主目录用什么表示? 切换目录用什么命令&#xff1f; 2、怎么查看当前进程&#xff1f;怎么执行退出&#xff1f;怎么查看当前路径&#xff1f; 3、怎么清屏&#xff1f;怎么退出当前命…...

HIVE SQL取整函数汇总

目录 int()round(double a)round(double a,int d)floor()ceil() int() 向零取整&#xff0c;即向接近零的方向取整。 int(5.6)输出&#xff1a;5 int(-5.6)输出&#xff1a;-5 round(double a) 四舍五入取整 select round(5.6)输出&#xff1a;6 select round(-5.6)输出&…...

VMware 虚拟机设置静态IP

1.桥接模式&#xff1a;无线网卡虚拟机可以桥接的&#xff0c;Vmware0是虚拟机默认进入的虚拟网络&#xff0c;打开虚拟网络编辑器把Vmware0桥接到具体的无线网卡上&#xff0c;再打开网卡设置选择桥接模式即可。 2、.NAT模式下 &#xff1a;window下VMnet8: IPv4 地址 . . . …...

pandas 如何获取dataframe的行的数量

pandas的dataframe提供了多种方法获取其中数据的行的数量&#xff0c;本偏文章就是介绍几种获取dataframe行和列出量的方法。 为了能够详细说明如何通过代码获取dataframe的行数和列数&#xff0c;需要先创建一个dataframe如下&#xff1a; import pandas as pdtechnologies …...

css实现图片绕中心旋转,鼠标悬浮按钮炫酷展示

vue模板中代码 <div class"contentBox clearfix home"><div class"circle"><img class"in-circle" src"../../assets/img/in-circle.png" alt""><img class"out-circle" src"../../as…...

C++11的线程

线程的创建 用std::thread创建线程非常简单&#xff0c;只需要提供线程函数或者线程对象即可&#xff0c;并可以同时指定线程函数的参数。下面是创建线程的示例&#xff1a; #include <thread> #include <iostream> using namespace std;void func() {cout <<…...

Deepmind开发音频模型Lyria 用于生成高品质音乐;创建亚马逊新产品评论摘要

&#x1f989; AI新闻 &#x1f680; Deepmind开发音频模型Lyria 用于生成高品质音乐 摘要&#xff1a;Deepmind推出名为Lyria的音频模型&#xff0c;可生成带有乐器和人声的高品质音乐。Lyria模型针对音乐生成的挑战&#xff0c;解决了音乐信息密度高、音乐序列中的连续性维…...

Liunx系统使用超详细(一)

目录 一、Liunx系统的认识 二、Liunx和Windows区别 三、Liunx命令提示符介绍 四、Liunx目录结构 一、Liunx系统的认识 Linux系统是一种开源的、类Unix操作系统内核的实现&#xff0c;它基于Unix的设计原理和思想&#xff0c;并在全球范围内广泛应用。以下是对Linux系统的详…...

C语言标准

1、概述 C语言标准是由ANSI&#xff08;美国国家标准协会&#xff09;和ISO&#xff08;国际标准化组织&#xff09;共同制定的一种语言规范。标准经历过如下更新&#xff1a; C89/C90标准C99标准C11标准C17标准 2、C89/C90标准 (1)这是1989年正式发布的C语言标准&#xff0…...

TI 毫米波雷达开发系列之mmWave Studio 和 Visuiallizer 的异同点雷达影响因素分析

TI 毫米波雷达开发之mmWave Studio 和 Visuiallizer 的异同点 引入整个雷达系统研究的目标分析影响这个目标的因素硬件影响因素 —— 雷达系统的硬件结构&#xff08;主要是雷达收发机&#xff09;AWR1642芯片硬件系统组成MSS 和 DSS 概述MSS 和 DSS 分工BSS的分工AWR1642 组成…...

SpringBoot事务处理

一、事务回顾 回顾地址&#xff1a; 深入理解数据库事务&#xff08;超详细&#xff09;_数据库事务操作_Maiko Star的博客-CSDN博客 事务&#xff1a; 是一组操作的集合&#xff0c;是一个不可分割的工作单位&#xff0c;这些操作要么同时成功&#xff0c;要么同时失败 事…...

网络安全—自学

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高&#xff1b; 二、则是发展相对成熟…...

首页以卡片形式来展示区块链列表数据(Web3项目一实战之五)

我们已然在 Web3 分布式存储 IPFS(Web3项目一实战之四) 介绍了什么是IPFS,以及在本地电脑如何安装它。虽然在上一篇讲解了该怎么安装IPFS,也做了相应的配置,但在本地开发阶段,前端总是无法避免跨域这个远程请求api的”家常便饭的通病“。 很显然,对于出现跨域这类常见问…...

opencv使用pyinstaller打包错误:‘can‘t find starting number (in the name of file)

使用Python语言和opencv模块在pycharm中编辑的代码运行没问题&#xff0c;但是在使用pyinstaller打包后出现错误can‘t find starting number (in the name of file) [ERROR:0] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-q3d_8t8e\opencv\modules\videoi…...

4.一维数组——用数组处理求Fibonacci数列前20项

文章目录 前言一、题目描述 二、题目分析 三、解题 程序运行代码 四、结果显示 前言 本系列为一维数组编程题&#xff0c;点滴成长&#xff0c;一起逆袭。 一、题目描述 用数组处理求Fibonacci数列前20项 二、题目分析 前两项&#xff1a;f[20]{1,1} 后18项&#xff1a;for(…...

Java 语言特性(面试系列1)

一、面向对象编程 1. 封装&#xff08;Encapsulation&#xff09; 定义&#xff1a;将数据&#xff08;属性&#xff09;和操作数据的方法绑定在一起&#xff0c;通过访问控制符&#xff08;private、protected、public&#xff09;隐藏内部实现细节。示例&#xff1a; public …...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Mac软件卸载指南,简单易懂!

刚和Adobe分手&#xff0c;它却总在Library里给你写"回忆录"&#xff1f;卸载的Final Cut Pro像电子幽灵般阴魂不散&#xff1f;总是会有残留文件&#xff0c;别慌&#xff01;这份Mac软件卸载指南&#xff0c;将用最硬核的方式教你"数字分手术"&#xff0…...

如何在最短时间内提升打ctf(web)的水平?

刚刚刷完2遍 bugku 的 web 题&#xff0c;前来答题。 每个人对刷题理解是不同&#xff0c;有的人是看了writeup就等于刷了&#xff0c;有的人是收藏了writeup就等于刷了&#xff0c;有的人是跟着writeup做了一遍就等于刷了&#xff0c;还有的人是独立思考做了一遍就等于刷了。…...

ABAP设计模式之---“简单设计原则(Simple Design)”

“Simple Design”&#xff08;简单设计&#xff09;是软件开发中的一个重要理念&#xff0c;倡导以最简单的方式实现软件功能&#xff0c;以确保代码清晰易懂、易维护&#xff0c;并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计&#xff0c;遵循“让事情保…...

让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比

在机器学习的回归分析中&#xff0c;损失函数的选择对模型性能具有决定性影响。均方误差&#xff08;MSE&#xff09;作为经典的损失函数&#xff0c;在处理干净数据时表现优异&#xff0c;但在面对包含异常值的噪声数据时&#xff0c;其对大误差的二次惩罚机制往往导致模型参数…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...

CVPR2025重磅突破:AnomalyAny框架实现单样本生成逼真异常数据,破解视觉检测瓶颈!

本文介绍了一种名为AnomalyAny的创新框架&#xff0c;该方法利用Stable Diffusion的强大生成能力&#xff0c;仅需单个正常样本和文本描述&#xff0c;即可生成逼真且多样化的异常样本&#xff0c;有效解决了视觉异常检测中异常样本稀缺的难题&#xff0c;为工业质检、医疗影像…...