C++获取目录中所有图片路径的函数get_image_paths解析
本文将全面解析一个用于获取目录中图片路径的C++函数get_image_paths
,从基础语法到高级概念,涵盖C++标准库、文件系统操作、异常处理等多个方面。
原始代码
std::vector<std::string> get_image_paths(const std::string& directory_path) {log_message("Scanning directory for images: " + directory_path);std::vector<std::string> image_paths;try {for (const auto& entry : fs::directory_iterator(directory_path)) {if (entry.is_regular_file()) {std::string extension = entry.path().extension().string();if (extension == ".jpg" || extension == ".jpeg" ||extension == ".png" || extension == ".bmp") {image_paths.push_back(entry.path().string());}}}log_message("Found " + std::to_string(image_paths.size()) + " images in directory");}catch (const fs::filesystem_error& e) {log_message("Error accessing directory: " + std::string(e.what()));}return image_paths;
}
函数概述
std::vector<std::string> get_image_paths(const std::string& directory_path)
这是一个C++函数,它的作用是扫描指定目录下的所有文件,找出其中图片文件(.jpg, .jpeg, .png, .bmp格式)的路径,并将这些路径以字符串形式存储在std::vector
中返回。
函数签名详解
-
返回类型:
std::vector<std::string>
• 表示函数返回一个字符串向量,每个字符串代表一个图片文件的完整路径•
std::vector
是C++标准模板库(STL)中的动态数组容器•
std::string
是C++标准库中的字符串类 -
函数名:
get_image_paths
• 遵循小写加下划线的命名约定,这是C++中常见的函数命名风格• 名称直观表达了函数的功能
-
参数:
const std::string& directory_path
• 参数类型是const std::string&
,表示一个不可修改的字符串引用• 使用引用(&)避免不必要的字符串拷贝
•
const
保证函数内不会修改原始字符串•
directory_path
是要扫描的目录路径
函数体逐行解析
第1行:日志记录
log_message("Scanning directory for images: " + directory_path);
• log_message
:假设是一个自定义的日志记录函数
• 字符串拼接:使用+
运算符连接字符串字面量和directory_path
• 这行代码的作用是记录程序正在扫描哪个目录
第2行:初始化结果容器
std::vector<std::string> image_paths;
• 声明并初始化一个空的std::vector<std::string>
对象
• 这个向量将用于存储找到的所有图片文件路径
第3-4行:try块开始
try {
• try
关键字开始一个异常处理块
• 后续代码如果抛出异常,可以被catch块捕获
第5行:目录迭代循环
for (const auto& entry : fs::directory_iterator(directory_path)) {
• 基于范围的for循环(C++11特性),遍历目录中的所有条目
• fs::directory_iterator
:C++17文件系统库中的目录迭代器
• fs
是std::filesystem
命名空间的别名
• directory_iterator
构造时会枚举指定目录下的所有文件系统条目
• const auto& entry
:自动类型推导,entry
是目录中每个条目的引用
• const
表示循环内不会修改entry
• auto
让编译器自动推导类型,这里是fs::directory_entry
• &
避免不必要的拷贝
第6行:检查是否为普通文件
if (entry.is_regular_file()) {
• is_regular_file()
:directory_entry
类的方法,检查当前条目是否是普通文件
• 返回bool
,如果是普通文件返回true,否则false
• 排除目录、符号链接、设备文件等特殊文件类型
第7行:获取文件扩展名
std::string extension = entry.path().extension().string();
• 分解操作:
-
entry.path()
:获取directory_entry
对应的fs::path
对象 -
extension()
:fs::path
的方法,返回表示文件扩展名的fs::path
对象
◦ 例如,对于"image.jpg",返回".jpg" -
string()
:将fs::path
转换为std::string
• 结果存储在extension
变量中
第8-10行:检查图片扩展名
if (extension == ".jpg" || extension == ".jpeg" ||extension == ".png" || extension == ".bmp") {
• 逻辑或(||
)组合多个条件,检查扩展名是否是支持的图片格式
• 比较字符串是否相等(==
),C++的std::string
重载了比较运算符
• 注意:比较区分大小写,".JPG"不会被匹配
第11行:存储符合条件的路径
image_paths.push_back(entry.path().string());
• entry.path().string()
:获取文件的完整路径并转为字符串
• push_back
:std::vector
的方法,在向量末尾添加新元素
• 符合条件的图片路径被添加到结果向量中
第12行:日志记录找到的图片数量
log_message("Found " + std::to_string(image_paths.size()) + " images in directory");
• image_paths.size()
:获取向量中元素数量
• std::to_string
:将数值转换为字符串
• 字符串拼接记录找到的图片数量
第13-14行:异常处理
catch (const fs::filesystem_error& e) {log_message("Error accessing directory: " + std::string(e.what()));
}
• catch
:捕获特定类型的异常
• const fs::filesystem_error& e
:捕获文件系统错误异常
• fs::filesystem_error
是文件系统操作抛出的异常类型
• const &
避免拷贝异常对象
• e.what()
:获取异常描述信息
• 记录错误日志,但不会中断程序执行
第16行:返回结果
return image_paths;
• 返回存储了所有图片路径的向量
• 如果目录不存在或无法访问,返回空向量
深入技术细节
- C++文件系统库
std::filesystem
是C++17引入的标准库,提供文件系统操作功能。使用前需要:
#include <filesystem>
namespace fs = std::filesystem; // 常用别名
主要组件:
• fs::path
:表示文件系统路径的类
• fs::directory_entry
:目录条目信息
• fs::directory_iterator
:遍历目录内容
• fs::filesystem_error
:文件系统操作异常
- 基于范围的for循环
for (const auto& entry : fs::directory_iterator(directory_path))
等价于传统循环:
auto it = fs::directory_iterator(directory_path);
auto end = fs::directory_iterator();
for (; it != end; ++it) {const auto& entry = *it;// ...
}
优点:
• 更简洁
• 避免手动处理迭代器
• 减少出错可能
- 异常处理机制
C++异常处理流程:
1.try
块包含可能抛出异常的代码
2.catch
块捕获并处理特定类型异常
3.未被捕获的异常会向上传播
fs::filesystem_error
特定成员:
• path1()
, path2()
:相关路径
• code()
:错误码
• what()
:描述信息
- const和引用
• const std::string&
参数:
• const
:承诺不修改原始数据
• &
:引用传递,避免拷贝开销
• const auto&
循环变量:
• 同样避免拷贝目录条目对象
• const
确保循环内不修改条目
- std::vector的使用
std::vector
是动态数组:
• push_back
:添加元素到末尾
• size
:获取元素数量
• 自动管理内存,无需手动分配/释放
潜在问题与改进建议
- 扩展名大小写问题
当前实现区分大小写,可能错过".JPG"等文件。改进:
std::string extension = entry.path().extension().string();
std::transform(extension.begin(), extension.end(), extension.begin(), ::tolower);
if (extension == ".jpg" || ...)
- 性能考虑
• 频繁调用entry.path().string()
可能产生临时字符串
• 改进:先获取path对象,再统一转换
const auto& path = entry.path();
std::string extension = path.extension().string();
// ...
image_paths.push_back(path.string());
- 异常处理不足
当前只捕获filesystem_error
,可能还有其他异常。可以:
catch (const fs::filesystem_error& e) {// 文件系统特定错误处理
}
catch (const std::exception& e) {// 其他标准异常
}
catch (...) {// 未知异常
}
- 支持更多图片格式
可根据需求添加更多格式:
if (extension == ".jpg" || extension == ".jpeg" || extension == ".png" || extension == ".bmp" ||extension == ".gif" || extension == ".tiff") {// ...
}
- 递归扫描子目录
当前不处理子目录。添加递归支持:
void scan_directory(const fs::path& dir, std::vector<std::string>& image_paths) {for (const auto& entry : fs::directory_iterator(dir)) {if (entry.is_directory()) {scan_directory(entry.path(), image_paths);}else if (entry.is_regular_file()) {// 检查扩展名并添加}}
}
完整改进版实现
#include <vector>
#include <string>
#include <filesystem>
#include <algorithm>
#include <cctype>namespace fs = std::filesystem;std::vector<std::string> get_image_paths(const std::string& directory_path) {log_message("Scanning directory for images: " + directory_path);std::vector<std::string> image_paths;try {for (const auto& entry : fs::directory_iterator(directory_path)) {if (!entry.is_regular_file()) {continue;}const auto& path = entry.path();std::string extension = path.extension().string();// 转换为小写以支持各种大小写组合std::transform(extension.begin(), extension.end(), extension.begin(),[](unsigned char c) { return std::tolower(c); });// 支持的图片格式static const std::vector<std::string> image_extensions = {".jpg", ".jpeg", ".png", ".bmp", ".gif", ".tiff"};if (std::find(image_extensions.begin(), image_extensions.end(), extension) != image_extensions.end()) {image_paths.push_back(path.string());}}log_message("Found " + std::to_string(image_paths.size()) + " images in directory");}catch (const fs::filesystem_error& e) {log_message("Filesystem error accessing " + directory_path + ": " + e.what());}catch (const std::exception& e) {log_message("Standard exception while scanning " + directory_path + ": " + e.what());}catch (...) {log_message("Unknown error occurred while scanning " + directory_path);}return image_paths;
}
总结
这个get_image_paths
函数展示了现代C++的多个重要特性:
- 文件系统操作:使用C++17的
std::filesystem
进行跨平台文件操作 - 异常处理:合理捕获和处理可能出现的错误
- 容器使用:
std::vector
存储和管理结果集 - 现代循环:基于范围的for循环简化迭代
- 类型安全:利用auto和const等特性增强代码安全性和可读性
通过这个函数的学习,我们不仅理解了如何实现目录扫描功能,还掌握了现代C++开发中的许多最佳实践。这些知识可以应用于各种文件处理、数据收集和系统工具开发的场景中。
相关文章:
C++获取目录中所有图片路径的函数get_image_paths解析
本文将全面解析一个用于获取目录中图片路径的C函数get_image_paths,从基础语法到高级概念,涵盖C标准库、文件系统操作、异常处理等多个方面。 原始代码 std::vector<std::string> get_image_paths(const std::string& directory_path) {log_…...
物联网无线传感方向专业词汇解释
涡旋电磁波(VEMW):一种具有轨道角动量的电磁波,其特性在于能够在传播过程中携带额外的相位信息,从而增加通信系统的容量和灵活性。波前:波动传播过程中,同一时刻振动相位相同的所有点构成的几何曲面,代表波…...
【C语言指针超详解(五)】--回调函数,qsort函数的理解和使用,qsort函数的模拟实现
目录 一.回调函数 1.1--回调函数的概念 1.2--回调函数改造计算器程序 二.qsort函数的理解和使用 2.1--qsort函数的理解 2.2--使用qsort函数排序整型数据 2.3--使用qsort函数排序结构数据 三.qsort函数的模拟实现 🔥个人主页:草莓熊Lotso的个人主…...
【Linux网络】————HTTP协议详解
作者主页: 作者主页 本篇博客专栏:Linux 创作时间 :2025年5月11日 1. HTTP 协议介绍 基本介绍: http协议全称:超文本传输协议,适用于从万维网服务器传输超文本到本地的传送协议。HTTP是一种应用层协议…...
使用WinSW工具将exe注册为window服务
下载工具WinSW(工具在GitHub上 打不开就需要魔法VPN) 文件准备 将以下文件放在同一个目录(例如:WebSocketService 文件夹)中: WebScoket.exe WinSW-x64.exe WebScoketService.xml ← 服务配置文件 install_service.bat ←…...
远程命令执行RCE概述
远程命令执行RCE诞生于1997年,比SQL注入早1年,据说当时的程序员发现在网站里可以随意的删除网页,就像删除本地文件一样简单,但是这种场景相对不多,因此没有SQL注入广泛,早期的web攻击像现在的护网一样&…...
在 .NET 8 开发的WinForms 程序中展示程序版本号的几种方式
前言 欢迎关注dotnet研习社,今天我们讨论一个Winform开发中的一个常见的需求内容“关于程序的版本号显示”。 在 WinForms 桌面应用程序开发中,向用户显示当前程序的版本号是一个常见的需求,尤其是在产品发布、更新提示或技术支持场景中尤为…...
[特殊字符] Spring Cloud 微服务项目中 common 模块依赖导致网关启动失败的排查与解决
在进行微服务开发时,我们通常会抽取一个 common 公共模块,封装一些通用配置类、工具类、拦截器、常用组件依赖等,供多个微服务共享使用。 但近期在实际开发中,出现了一个典型问题:在 Gateway 网关模块中引入 common 后…...
Java SpringMVC 和 MyBatis 整合关键配置详解
目录 一、数据源配置二、MyBatis 工厂配置三、Mapper 扫描配置四、SpringMVC 配置五、整合示例实体类Mapper 接口Mapper XML 文件Service 类控制器JSP 页面六、总结在 Java Web 开发中,SpringMVC 和 MyBatis 是两个常用框架。SpringMVC 负责 Web 层的请求处理和视图渲染,MyBa…...
24.(vue3.x+vite)引入组件并动态挂载(mount)
示例截图 组件代码: <template><div><div>{{message }}</div>...
Linux 软件包|服务管理
rpm 指令备注rpm -qa查看已安装软件,可以结合grep过滤查找rpm -e firefox卸载firefoxrpm -ivh firefox-115.12.0-1.el7.centos.i686.rpm安装gcc(只能离线安装) yum 能够从指定的服务器自动下载 RPM 包并且安装 指令备注yum list列出所有可…...
前端上传el-upload、原生input本地文件pdf格式(纯前端预览本地文件不走后端接口)
前端实现本地文件上传与预览(PDF格式展示)不走后端接口 实现步骤 第一步:文件选择 使用前端原生input上传本地文件,或者是el-upload组件实现文件选择功能,核心在于文件渲染处理。(input只不过可以自定义样…...
TestNG接口自动化
第一章、 Rest assured接口测试框架 一、概述 接口自动化的框架,主要是用来做接口自动化测试,返回的报文都是JSON 语法比较简单,只需要掌握常用的方法 用例运行的速度非常快 断言的机制 Json 封装相关方法,jsonpath,x…...
Parasoft C++Test软件单元测试_实例讲解(指针类型的处理)
系列文章目录 Parasoft C++Test软件静态分析:操作指南(编码规范、质量度量)、常见问题及处理 Parasoft C++Test软件单元测试:操作指南、实例讲解、常见问题及处理 Parasoft C++Test软件集成测试:操作指南、实例讲解、常见问题及处理 进阶扩展:自动生成静态分析文档、自动…...
ngx_http_keyval_module动态键值管理
一、模块安装与验证 检查模块是否可用 nginx -V 2>&1 | grep --color -o ngx_http_keyval_module如果看到 ngx_http_keyval_module,说明模块已编译进 NGINX。 若未找到,请联系你的 NGINX 供应商,获取商业版或重新编译并启用该模块&am…...
面试篇:Spring MVC
基础概念 什么是Spring MVC? Spring MVC 是 Spring Framework 提供的一个基于 Servlet 的 Web 框架,属于 MVC(Model-View-Controller)架构的一种实现。它通过 DispatcherServlet 作为前端控制器,对请求进行分发和调度…...
C++初阶-string类的模拟实现3
目录 1.string::find(char ch,size_t pos0) const的模拟实现 2.string::find(const char* str,size_t pos0) const的模拟实现 3.string::size() const和string::capacity() const的模拟实现 4.string::operator[] (size_t pos)和string::operator[] (size_t pos) const的模拟…...
接口出现 请求参数格式错误 的解决方法
目录 前言1. 问题所示2. 原理分析3. 解决方法前言 🤟 找工作,来万码优才:👉 #小程序://万码优才/r6rqmzDaXpYkJZF 爬虫神器,无代码爬取,就来:bright.cn Java基本知识: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理…...
MYSQL时间函数、group by 和partition by的区别、组内编号leetcode学习
mysql时间函数 select now(); --当前时间 select current_date() --当前日期 select current_timestamp --同now()select date(2025-04-14 12:34:56) --提取日期部分:2025-04-14 select datediff(2025-4-14,2025-04-10) 日期相差四天 select date_sub(2024-04-14,…...
OpenCV 的 CUDA 模块中用于将一个多通道 GpuMat 图像拆分成多个单通道图像的函数split()
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 cv::cuda::split 是 OpenCV CUDA 模块中的一个函数,用于将一个多通道的 GpuMat 图像拆分成多个单通道的 GpuMat 图像。这个函数是 CP…...
吴恩达机器学习笔记:单变量线性回归
通过一个例子来开始:这个例子是预测住房价格的,我们要使用一个数据集,数据集包含俄勒冈州波特兰市的住房价格。根据不同房屋尺寸所售出的价格,画出我的数据集。比方说,如果房子是 1250 平方尺大小,你要告诉…...
UI自动化测试框架:PO 模式+数据驱动
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 1. PO 设计模式简介 什么是 PO 模式? PO(PageObject)设计模式将某个页面的所有元素对象定位和对元素对象的操作封装成…...
NestJS 知识框架
一、核心概念 1. 架构基础 基于 Express/Fastify 的 Node.js 框架 采用模块化设计 使用 TypeScript 构建(也支持 JavaScript) 借鉴 Angular 的设计理念 2. 主要组件 模块 (Module): 应用的基本组织单元 控制器 (Controller): 处理 HTTP 请求 服务…...
Porting Linux to a new processor architecture, part 1: The basics
Although a simple port may count as little as 4000 lines of code—exactly 3,775 for the mmu-less Hitachi 8/300 recently reintroduced in Linux 4.2-rc1—getting the Linux kernel running on a new processor architecture is a difficult process. Worse still, the…...
Dagster Pipes系列-1:调用外部Python脚本
本文是"Dagster Pipes教程"的第一部分,介绍如何通过Dagster资产调用外部Python脚本并集成到数据管道中。首先,创建Dagster资产subprocess_asset,利用PipesSubprocessClient资源执行外部脚本external_code.py,实现跨进程…...
北京傲云源墅——区域价值腾飞的高端之选
在北京这座繁华都市中,房产的价值往往与区域的发展潜力息息相关。而傲云源墅项目,正位于极具价值的孙河墅区,这片土地正发生着令人瞩目的蝶变。近年来,孙河区域的崛起引人注目。2025 年 3 月,北京朝阳区平房乡黄杉木店…...
扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析
扩展:React 项目执行 yarn eject 后的 package.json 变化详解及参数解析 什么是 yarn eject?React 项目执行 yarn eject 后的 package.json 变化详解1. 脚本部分 Scripts 被替换2. 新增构建依赖 dependencies(部分)3. 新增 Babel …...
编写一个处理txt的loader插件,适用于wbepack
处理txt的webpack的loader插件 编写一个处理txt的loader插件,适用于wbepack 编写一个处理txt的loader插件,适用于wbepack 实现一个处理txt的插件,给文本每行前后添加**** module.exports function txtLoader(content) {// 确保 Loader 是异…...
高速边坡监测成本高?自动化如何用精准数据省预算?
高速边坡自动化监测解决方案 一、边坡监测的概述 1.1 边坡监测的背景 我国山地丘陵约占国土面积的65%,且地质地貌复杂,气候类型多样,构成活动频繁,自然灾害隐患多,分布广。而且近年来由于高速公路边坡滑坡灾害引发的事…...
SysAid On-Prem XML注入漏洞复现(CVE-2025-2776)
免责申明: 本文所描述的漏洞及其复现步骤仅供网络安全研究与教育目的使用。任何人不得将本文提供的信息用于非法目的或未经授权的系统测试。作者不对任何由于使用本文信息而导致的直接或间接损害承担责任。如涉及侵权,请及时与我们联系,我们将尽快处理并删除相关内容。 前…...
WEB安全--RCE--webshell bypass2
继WEB安全--RCE--webshell bypass的补充: 六、PHP反序列化 webshell: <?php $s unserialize(a:2:{i:0;O:8:"stdClass":1:{s:1:"a";i:1;}i:1;r:2;}); $c "123"; $arr get_declared_classes(); $i0;for($i;$i<c…...
Spark处理过程-转换算子和行动算子
(一)RDD的处理过程 RDD经过一系列的“转换”操作,每一次转换都会产生不同的RDD,以供给下一次“转换”操作使 用,直到最后一个RDD经过“行动”操作才会真正被计算处理。 1.延迟。RDD中所有的转换都是延迟的&…...
Spring Boot 配置文件敏感信息加密:Jasypt 实战
目录 1. 为什么需要加密配置文件? 2. Jasypt 快速集成 2.1 在xml文件中添加 Maven 依赖 2.2 生成加密字符串 编辑 编辑 3. 安全最佳实践 4. 常见问题 Q1:加密后启动报错? Q2&…...
c++STL-vector的模拟实现
cSTL-vector的模拟实现 vector的模拟实现基本信息构造函数析构函数返回容量(capacity)返回元素个数(size)扩容(reserve和resize)访问([])迭代器(**iterator**)…...
【Python 变量类型】
Python 是一种动态类型语言,变量类型在运行时自动确定,无需显式声明。以下是 Python 中核心变量类型的分类与用法详解: 一、基本数据类型 1. 数值类型 整数 (int) 支持正负数、零和二进制/八进制/十六进制表示: a 42 b 0o52 #…...
2.2 微积分的解释
第一阶段:曲直转化的数学革命 原始困境: 几何局限:古希腊几何仅能计算矩形/三角形等直线图形面积现实需求:17世纪弹道轨迹、行星轨道等曲线相关计算需求激增关键矛盾:直线数学工具(如毕达哥拉斯定理&…...
如何使用Selenium?
Selenium 是一个用于 Web 自动化测试 的开源工具套件,支持多种浏览器和编程语言。它最初是为测试 Web 应用而设计,但也被广泛用于 网页数据抓取 和 自动化操作。 Selenium 的核心组件 Selenium WebDriver 直接控制浏览器,模拟用户操作&…...
SVN 中文路径访问报错(权限已正确分配)
问题:SVN 中文路径访问报错(权限已正确分配) 原因: 1、URL特殊字符未转义 路径中包含空格、中文括号()等特殊符号,未进行URL编码 中文括号()示例:(设计)需转为%28%E8%AE%BE%E8%AE%A1%29,空格需…...
【Python 基础语法】
Python 基础语法是编程的基石,以下从核心要素到实用技巧进行系统梳理: 一、代码结构规范 缩进规则 使用4个空格缩进(PEP 8标准)缩进定义代码块(如函数、循环、条件语句) def greet(name):if name: # 正确缩…...
讲讲git 和svn
讲讲git 和svn 目录Git到底是什么?它该怎末用?核心概念基础操作1. 仓库的创建2. 文件的提交工作流程3. 分支管理4. 远程仓库操作 进阶操作实际应用建议**基本用法****常用命令的帮助示例****帮助文档的结构****替代方法****练习建议****核心概念****与Gi…...
运用数组和矩阵对数据进行存取和运算——NumPy模块 之四
目录 NumPy模块介绍 3.4 NumPy 数组重塑与转置 3.4.1 操作机制的理论逻辑 3.4.2 一维数组的重塑 3.4.3 多维数组的重塑 3.4.4 数组的转置操作 3.4.5 知识点总结与课程回顾 3.4.6 课后练习题 NumPy模块介绍 NumPy 是 Python 科学计算领域的重要基石,与当前 “躺吃旅行…...
机器学习第六讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列
机器学习第六讲:向量/矩阵 → 数据表格的数学表达,如Excel表格转数字阵列 资料取自《零基础学机器学习》。 查看总目录:学习大纲 关于DeepSeek本地部署指南可以看下我之前写的文章:DeepSeek R1本地与线上满血版部署:…...
服务器多JAR程序运行与管理指南
在同一台服务器上同时运行多个JAR程序是完全可以的,但需要注意以下几点以确保稳定性和性能: 关键注意事项 端口冲突 如果JAR程序是网络服务(如Web应用),确保每个程序监听不同的端口(例如:8080、…...
vue实现进度条带指针
效果最终 function calculatePointerPosition(value) {if (value < 2.6) return 12.5; // 非常差位置if (value < 5.1) return 37.5; // 较差位置if (value < 7.1) return 62.5; // 良好位置return 90; // 非常满意位置 }function getStatusText(value) {if (valu…...
【C++】智能指针
前言 上文我们学到了C11的异常,了解到了C与C语言处理错误的区别,异常的特点在于抛出与接收。【C11】异常-CSDN博客 本文我们来学习C中的下一个功能:智能指针 1.智能指针的使用场景 在上文我们知道了抛异常的知识,抛异常的“抛”这…...
Adobe Acrobat pro在一份PDF中插入空白页
在Adobe Acrobat pro中先打开我们的PDF文件; 用鼠标点击需要插入空白页处的上一页; 然后如下图操作: 默认会在光标处的下一页插入一张空白页,你也可以修改插入页的页码或者向前一页插入...
Oracle adg环境下调整redo日志组以及standby日志组大小
1.在adg环境中,调整redo日志组大小以及standby日志组大小主要思路如下: a、先备库增加standby redo 删除老standby redo, b、然后主库增加redo删除老redo, c、备库增加新redo删除老redo, d、最后主库增加standby redo。 #主库 [oracleDB196 ~]$ sql / a…...
Nlog适配达梦数据库进行日志插入
前言 原来使用的是SQLServer数据库,使用Nlog很流畅,没有什么问题。现在有个新项目需要使用麒麟操作系统和达梦数据库,业务流程开发完成之后发现Nlog配置文件中把数据库连接内容修改之后不能执行插入操作。 原Nlog.config配置 <?xml ve…...
记一次redis未授权被种挖矿
#挖矿程序 /etc/httpgd /etc/nnt.sh #大小问 #定时任务名为root /var/spool/cron/root 内容:*/50 * * * * sh /etc/nnt.sh >/dev/null 2>&1 定时任务只有所有者可以写,且chmod修改权限失败。 #先查看定时任务的拓展属性,不可变(i…...
Docker私有仓库实战:官方registry镜像实战应用
抱歉抱歉,离职后反而更忙了,拖了好久,从4月拖到现在,在学习企业级方案Harbor之前,我们先学习下官方方案registry,话不多说,详情见下文。 注意:下文省略了基本认证 TLS加密ÿ…...