【c++文件】

news2024/11/26 16:57:00

C++是一种面向对象的编程语言,它广泛应用于各个领域,如游戏开发、嵌入式系统、操作系统等。在C++编程中,文件操作是一项非常重要的技能。本文将介绍C++文件操作的基本知识以及一些有趣的应用,带领大家一起探索C++文件操作的魅力。

在这里插入图片描述

一、C++文件操作基本知识

  1. 文件流类
    C++标准库提供了四个文件流类,分别是ifstream(输入文件流)、ofstream(输出文件流)、fstream(输入/输出文件流)和filebuf(文件缓冲区)。这四个类都是从ios(输入/输出流)类派生而来的。

  2. 打开文件
    在使用文件之前,我们需要先打开它。打开文件的方法是创建一个文件流对象,并使用open()函数打开文件。例如:

#include <iostream>
#include <fstream>
using namespace std;

int main() {
    ofstream outfile("example.txt"); // 创建输出文件流对象
    if (!outfile) { // 判断文件是否打开成功
        cout << "Failed to open the file." << endl;
        return 1;
    }
    outfile << "Hello, World!" << endl; // 写入数据到文件
    outfile.close(); // 关闭文件
    return 0;
}

二、C++文件操作的有趣应用

  1. 文本加密与解密
    我们可以使用C++的文件操作来实现简单的文本加密与解密功能。例如,我们可以将每个字符的ASCII码值加上一个固定的数,从而实现加密;解密时,再将每个字符的ASCII码值减去同一个固定的数即可。代码如下:
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

void encrypt(string& text, int key) { // 加密函数
    for (auto& c : text) {
        c = c + key;
    }
}

void decrypt(string& text, int key) { // 解密函数
    for (auto& c : text) {
        c = c - key;
    }
}

int main() {
    string text = "Hello, World!"; // 要加密的文本
    int key = 3; // 加密密钥
    encrypt(text, key); // 加密文本
    ofstream outfile("example_encrypted.txt"); // 创建输出文件流对象,并写入加密后的文本
    if (!outfile) { // 判断文件是否打开成功
        cout << "Failed to open the file." << endl;
        return 1;
    }
    outfile << text << endl; // 写入加密后的文本到文件
    outfile.close(); // 关闭文件
    return 0;
}

上述代码中,我们定义了encrypt()和decrypt()两个函数,分别用于加密和解密文本。在main()函数中,我们先对要加密的文本进行加密处理,然后将其写入到一个文件中。读取该文件时,再对其进行解密处理即可还原原文本。这种方法虽然简单,但已经足够满足一些基本的需求了。如果需要更高级的加密方法,可以使用现成的加密库,如OpenSSL等。
2. 从网站下载图片并保存到本地文件夹中
我们可以使用C++的文件操作来从网站上下载图片并保存到本地文件夹中。例如,我们可以使用libcurl库来实现这个功能。以下是一个简单的示例代码:

#include <iostream>
#include <fstream>
#include <string>
#include <curl/curl.h> // libcurl头文件
using namespace std;

size_t write_data(void* buffer, size_t size, size_t nmemb, void* userp) { // libcurl回调函数,用于接收下载的数据并保存到文件中
    char* data = static_cast<char*>(userp); // 将用户指针转换为char类型指针,方便操作内存缓冲区
    size_t realsize = size * nmemb; // 计算实际下载的数据大小(字节数)
    data[realsize] = '\0'; // 添加字符串结束符'\0'到缓冲区的末尾,保证写入文件时不会出错(注意:这里假设buffer的大小为realsize + 1)
    return realsize; // 返回实际下载的数据大小(字节数)
}

int main() {
    CURL* curl = curl_easy_init(); // 初始化libcurl库,创建一个CURL对象指针cur
    if (curl) {
        string url = "https://example.com/image.jpg"; // 图片的URL地址
        string local_file_path = "local_folder/image.jpg"; // 本地文件夹路径和文件名
        ofstream file(local_file_path, ios::binary); // 以二进制模式打开本地文件
        if (file) {
            curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // 设置CURL选项,指定要下载的图片URL地址
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); // 设置CURL选项,指定回调函数write_data,用于接收下载的数据并保存到文件中
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &file); // 设置CURL选项,指定回调函数write_data的参数,即指向本地文件的文件指针
            CURLcode res = curl_easy_perform(curl); // 执行CURL操作,开始下载图片
            if (res != CURLE_OK) {
                cerr << "Error: " << curl_easy_strerror(res) << endl; // 如果下载过程中出现错误,输出错误信息
            } else {
                cout << "Image downloaded successfully!" << endl; // 如果下载成功,输出提示信息
            }
            curl_easy_cleanup(curl); // 清理CURL对象指针cur
            file.close(); // 关闭本地文件
        } else {
            cerr << "Error: Unable to open local file." << endl; // 如果无法打开本地文件,输出错误信息
        }
    } else {
        cerr << "Error: Unable to initialize libcurl." << endl; // 如果无法初始化libcurl库,输出错误信息
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1255025.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

autojs-练手-简单的视频号点赞(初阶版)

注释很详细&#xff0c;直接上代码&#xff08;简单的练手实践&#xff0c;仅供参考&#xff09; //设置点赞次数 var num50; //等待权限授予 auto.waitFor(); //进入点赞流程 while(num!0) {//先向下滑一个视频scrollDown();//使用auto.js找到点赞控件的id&#xff08;每个人不…

VBA技术资料MF86:将PPT文件批量另存为PDF文件

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。我的教程一共九套&#xff0c;分为初级、中级、高级三大部分。是对VBA的系统讲解&#xff0c;从简单的入门&#xff0c;到…

『OPEN3D』1.8 点云的配准理论

点云的配准是将不同的3D点云对齐成一个完成的点云模型&#xff1b;配准的目标是找到两帧点云之间的相对旋转&#xff08;rotation&#xff09;与平移&#xff08;translation&#xff09;&#xff0c;使得两份点云中有重叠的区域能够完好拼接。 点云配准示例图&#xff08;来自…

数据库基础教程之数据库的创建(一)

双击打开Navicat&#xff0c;点击&#xff1a;文件-》新建连接-》PostgreSQL 在下图新建连接中输入各参数&#xff0c;然后点击&#xff1a;连接测试&#xff0c;连接成功后再点击确定。 点击新建数据库 数据库设置如下&#xff1a;

10分钟构建本地知识库,让 ChatGPT 更加懂你

大家好&#xff0c;本文将从零开始构建本地知识库&#xff0c;从而辅助 ChatGPT 基于知识库内容生成回答。 这里再重复下部分核心观点&#xff1a; 向量&#xff1a;将人类的语言&#xff08;文字、图片、视频等&#xff09;转换为计算机可识别的语言&#xff08;数组&#xf…

ios开发 之 网络通信

第一节&#xff1a;URL、http 简介 运营商提供的DNS服务器&#xff08;有可能挂&#xff0c;所以有时候通过ip可以打开&#xff0c;通过域名不可以访问&#xff09;逐级递增请求&#xff0c;解析域名 google 提供的dns服务器8.8.8.8 编码怎么来的&#xff1a; 最开始是ASCII码…

【Web】/proc利用相关例题wp

先贴一篇文章一起学习一下 [CTF]proc目录的应用 - CodeAntenna ①[HDCTF 2023]YamiYami 点击Read somethings直接跳转到了百度 从url中发现存在任意文件读取&#xff0c;因为不知道flag在哪&#xff0c;所以考虑读环境变量 payload: ?urlfile:///proc/1/environ 拿到fla…

系列十七、各种各样的bean

一、Spring bean 1.1、概述 一句话&#xff0c;被Spring容器管理的bean就是Spring bean。 二、Java bean VS Spring bean 2.1、概述 Java bean是程序员自己new 出来的&#xff0c;Spring bean是Spring工厂创建出来的。 三、配置bean的方式 3.1、概述 所谓配置bean&#xff0…

【精选必读】MyBatis关联查询及注解开发

文章目录 MyBatis关联查询MyBatis一对一关联查询创建持久层接口创建映射文件配置文件注册映射文件测试一对一关联查询 MyBatis一对多关联查询创建持久层接口创建映射文件测试一对多关联查询 MyBatis多对多关联查询创建持久层接口创建映射文件测试多对多关联查询 MyBatis分解式查…

性能测试必看系列之Jmeter:硬件性能监控指标

硬件性能监控指标 一、性能监控初步介绍 性能测试的主要目标 1.在当前的服务器配置情况&#xff0c;最大的用户数 2.平均响应时间ART&#xff0c;找出时间较长的业务 3.每秒事务数TPS&#xff0c;服务器的处理能力 性能测试涉及的内容 1.客户端性能测试&#xff1a;web前…

一. BEV感知算法介绍

目录 前言1. BEV感知算法的概念2. BEV感知算法数据形式3. BEV开源数据集介绍3.1 KITTI数据集3.2 nuScenes数据集 4. BEV感知方法分类4.1 纯点云方案4.2 纯视觉方案4.3 多模态方案 5. BEV感知算法的优劣6. BEV感知算法的应用介绍7. 课程框架介绍与配置总结下载链接参考 前言 自动…

Nginx常见的中间件漏洞

目录 1、Nginx文件名逻辑漏洞 2、Nginx解析漏洞 3、Nginx越权读取缓存漏洞 这里需要的漏洞环境可以看&#xff1a;Nginx 配置错误导致的漏洞-CSDN博客 1、Nginx文件名逻辑漏洞 该漏洞利用条件有两个&#xff1a; Nginx 0.8.41 ~ 1.4.3 / 1.5.0 ~ 1.5.7 php-fpm.conf中的s…

由于找不到vcruntime140.dll无法继续执行代码-提供5个修复方法分你对比

摘要&#xff1a;本文将介绍vcruntime140.dll文件的作用及其在程序运行中的重要性&#xff0c;并提供五个解决vcruntime140.dll无法继续执行的方法。 一、vcruntime140.dll文件介绍 vcruntime140.dll是Windows操作系统中的一项重要文件&#xff0c;它是由Microsoft Visual C提…

交换技术-电路交换-报文交换-分组交换

交换技术是指主机之间、通信设备之间或主机与通信设备之间为交换信息所采用的数据格式和交换装置的方式。按交换技术可分为&#xff1a;电路交换、报文交换和分组交换。 电路交换 交换(switching)&#xff0c;就是按照某种方式动态地分配传输线路的资源。 电路交换是在源结点…

Scrapy爬虫异步框架之持久化存储(一篇文章齐全)

1、Scrapy框架初识&#xff08;点击前往查阅&#xff09; 2、Scrapy框架持久化存储&#xff08;点击前往查阅&#xff09; 3、Scrapy框架内置管道&#xff08;点击前往查阅&#xff09; 4、Scrapy框架中间件&#xff08;点击前往查阅&#xff09; Scrapy 是一个开源的、基于…

如何在Ubuntu系统上安装MongoDB

简单介绍 MongoDB是由C语言编写的&#xff0c;是一个基于分布式文件存储的开源数据库系统。在高负载的情况下&#xff0c;添加更多的节点&#xff0c;可以保证服务器性能。MongoDB旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB将数据存储为一个文档&#xff0c;数…

openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态

文章目录 openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态132.1 背景信息132.2 前提条件132.3 操作步骤132.4 参数说明132.5 示例 openGauss学习笔记-132 openGauss 数据库运维-查看openGauss状态 132.1 背景信息 openGauss支持查看整个openGauss的状态&#…

【从亮机卡开始的云炼丹】环境配置记录debug

要更改Anaconda环境的默认路径到D盘 可以按照以下步骤操作&#xff1a; 1. 打开Anaconda Prompt&#xff08;或者命令行窗口&#xff09;。 2. 输入以下命令更改Anaconda环境的默认路径到D盘&#xff1a; conda config --set envs_dirs D:\Anaconda\envs 这将把Anaconda环境…

【挑战业余一周拿证】二、在云中计算 - 第 2 节 - Amazon EC2 实例类型

第 2 节 - Amazon EC2 实例类型 如果我们想让企业尽可能高效地运作&#xff0c;那就一定要确保员工的技能组合适合他们的角色&#xff0c;就 像我们的咖啡店有不同类型的员工一样&#xff0c;亚马逊云科技也有不同类型的 EC2 实例。每种实例类型 都归属于一个实例系列&#x…

jQuery_08 each函数的使用

each函数的使用 可以循环数组&#xff0c;json&#xff0c;dom对象数组 1.$.each(要循环的内容,function(index,element){处理函数}) 要循环的内容可以是数组&#xff0c;json对象&#xff0c;dom数组 function&#xff1a;循环的处理函数 每个成员都会执行这个函数一次 index&…