C/C++ 异常处理机制(例:文件拷贝)
异常是一种程序控制机制,与函数机制互补。
函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它可以在出现“意外”时中断当前函数,并以某种机制(类型匹配)回馈给隔代的调用者相关的信息。
#include <iostream>
#include <stdlib.h>
using namespace std;
#define BUFSIZE 1024 //实现文件的二进制拷贝
int copyfile2(const char* dest, const char* src) {
FILE* fp1 = NULL, * fp2 = NULL; //rb只读方式打开一个二进制文件,只允许读取数据
fopen_s(&fp1, src, "rb"); if (fp1 == NULL) {
throw new string("字符串异常");
} ////wb只写方式打开或新建一个二进制文件,只允许写数据
fopen_s(&fp2, dest, "wb");
if (fp2 == NULL) {
return -2;
} char buffer[BUFSIZE];
int readlen = 0, writelen = 0; //如果读到数据,则大于0
while ((readlen == fread(buffer, 1, BUFSIZE, fp1)) > 0) {
writelen = fwrite(buffer,1,readlen,fp2);
if (readlen != writelen) {
return -3;
}
} fclose(fp1);
fclose(fp2);
return 0;
}
int copyfile1(const char* dest, const char* src) {
return copyfile2(dest,src);
}
int main() {
int ret = 0;
try{
ret = copyfile1("E:/C++project/dest.txt", "E:/C++project/src.txt");
}
catch (string *error) {
printf("捕捉到字符串异常:%s\n",error->c_str());
delete error;
}
catch (int error) {
printf("整型出现异常了!\n");
} if (ret != 0) {
switch (ret) {
case -1:
printf("打开源文件失败!\n");
break;
case -2:
printf("打开目标文件失败!\n");
break;
case -3:
printf("拷贝文件时失败!\n");
break;
default:
printf("出现未知失败!\n");
break;
}
}
system("pause");
return 0;
}

#include <iostream>
#include <string>
#include <stdlib.h>
using namespace std;
#define BUFSIZE 1024 //实现文件的二进制拷贝
int copyfile2(char* dest, char* src) {
FILE* fp1 = NULL, * fp2 = NULL;
//通过 throw 操作创建一个异常对象并抛掷
throw 0.01f;
//rb 只读方式打开一个二进制文件,只允许读取数据
fopen_s(&fp1, src, "rb");
if (fp1 == NULL) {
throw new string("文件不存在");
}
//wb 以只写的方式打开或新建一个二进制文件,只允许写数据。
fopen_s(&fp2, dest, "wb");
if (fp2 == NULL) {
throw - 2;
}
char buffer[BUFSIZE];
int readlen, writelen;
//如果读到数据,则大于 0
while ((readlen = fread(buffer, 1, BUFSIZE, fp1)) > 0) {
writelen = fwrite(buffer, 1, readlen, fp2);
if (readlen != writelen) {
throw - 3;
}
} fclose(fp1);
fclose(fp2);
return 0;
}
int copyfile1(char* dest, char* src) {
try {
copyfile2(dest, src);
}
catch (float e) {
//throw ;
printf("copyfile1 - catch ...%f\n",e);
//提示:处理不了的异常,我们可以在 catch 的最后一个分支,使用 throw语法,继续向调用者 throw。
throw;
} return 0;
}
int main() { int ret = 0;
//在需要捕捉异常的地方,将可能抛出异常的程序段嵌在 try 块之中
//按正常的程序顺序执行到达 try 语句,然后执行 try 块{}内的保护段
//如果在保护段执行期间没有引起异常,那么跟在 try 块后的 catch 子句就
//不执行,程序从 try 块后跟随的最后一个 catch 子句后面的语句继续执行下去
try {//保护段
printf("开始执行 copyfile1...\n");
//ret = copyfile1("E:/C++project/20230110/20230110/dest.txt", "E:/C++project/20230110/20230110/src.txt");
ret = copyfile1("E:/C++project/20230110/20230110/dest.txt","E:/C++project/20230110/20230110/src.txt");
printf("执行 copyfile1 完毕\n");
//catch 子句按其在 try 块后出现的顺序被检查,匹配的 catch 子句将捕获并按 catch 子句中的代码处理异常(或继续抛掷异常)
}
catch (int error) {
printf("整型出现异常啦!%d\n", error);
}
catch (string* error) {
printf("捕捉到字符串异常:%s\n", error->c_str());
delete error;
}
catch (float error) {
printf("浮点型出现异常啦!%f\n", error);
}
catch (...) {
printf("catch ...\n");
}
//如果没有找到匹配,则缺省功能是调用 abort 终止程序。
system("pause");
return 0;
}

C/C++ 异常处理机制(例:文件拷贝)的更多相关文章
- (java)从零开始之--异常处理(以文件拷贝为例)
开发过程中避免不了对异常的处理,但是异常的处理又不能乱throw 下面是简单的抛异常处理 public static void CopyFile(String souFile,String dirFi ...
- Spring MVC—拦截器,文件上传,中文乱码处理,Rest风格,异常处理机制
拦截器 文件上传 -中文乱码解决 rest风格 异常处理机制 拦截器 Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerI ...
- Java之异常处理机制
来源:深入理解java异常处理机制 2.Java异常 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 ...
- 深入理解java的异常处理机制
JAVA异常的概念 异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的 ...
- 如何正确使用Java异常处理机制
文章来源:leaforbook - 如何正确使用Java异常处理机制作者:士别三日 第一节 异常处理概述 第二节 Java异常处理类 2.1 Throwable 2.1.1 Throwable有五种构 ...
- .NET中的异常处理机制(一)
1.异常处理的总体指导思想 学习C#中的异常处理机制,大概要了解以下几点: 首先,我们需要知道的事所有具体异常都是继承自System.Exception基类的. 其次,要熟悉FCL类库内置好的一些异常 ...
- C++ 异常处理机制的实现
http://blog.jobbole.com/103925/ 本文深入讨论了VC++编译器异常处理的实现机制.附件源代码包含了一个VC++的异常处理库. 下载源代码 – 19 Kb 介绍 相对于传统 ...
- 理解java异常处理机制
1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...
- Objective-C try/catch异常处理机制原理。
try-catch-finaly finally在任何情况下都会执行(不管有没有异常),属于整个体系的附属. 基本思想是跳到捕获锚点,重新执行. http://www.cnblogs.com/mark ...
- PCL中异常处理机制
博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=287 本节我们主要讨论PCL在编写和应用过程中如何利用PCL的异常机制,提高 ...
随机推荐
- (四)kafka基础术语
1 Topic Kafka消息分类的标签,是一个逻辑概念. 2 Partion 主题作为消息的归类,可以细分为一个或多个分区,分区可以看做是对消息的二次归类.分区可以有一个至多个副本,每个副本对应一个 ...
- 华三防火墙主备ACL
dis cur | in policy 查看 policy-based-route 有线网络 permit node 5 policy-based-route 有线网络 permit node 10 ...
- 关于 verilator 中 config.vlt 等配置文件的使用
参考网页:https://verilator.org/guide/latest/exe_verilator.html#configuration-files 注意,在使用 config.vlt 配置文 ...
- docker实战(8)使用docker-compose快速搭建zookeeper集群
镜像下载 docker pull zookeeper 复制 zookeeper 集群的搭建 创建名为docker-compose.yml的文件 输入以下内容 version: '2' services ...
- C++ 读取文本, 读取( 单字符/ 一行/ 全部 )
C++ 读取文本 介绍三种读取方式: 逐字符读取(注意不是字节) 读取一行 读取全部 示例代码: #include <iostream> #include <string> # ...
- cadence报错:Class must be one of IC, IO, DISCRETE, MECHANICAL, PLATING_BAR or DRIVER_CELL.
在原理图文件上右键选择Edit Object Properties, 然后在class一栏中修改class为IC, IO, DISCRETE, MECHANICAL, PLATING_BAR or D ...
- pythonn全栈学习笔记--logging模块学习(四)
一.logging相关配置 1 import logging 2 """ 3 asctime:运行时间 4 name:主模块名称 5 levelname:日志级别 INF ...
- NX环境变量设置脚本
1 @ECHO OFF 2 TITLE NX 环境变量设置 3 color 3f 4 :MENU 5 CLS 6 ECHO. NX环境变量设置工具 7 ECHO.******************* ...
- java通信
RPC:同步 http webservice RMI:同步 RMI 是面向对象方式的 Java RPC . 类要extends java.rmi.Remote接口 JMS:异步 需要有消息队列 act ...
- 「DIARY」PKUSC 2021 游记
冬令营没了但是还有夏令营 (完蛋,前两天忘写游记了,完全没想起来--最后一天补一补) 试题分析在另外一篇博客上 # Day 0 早上去机场的时候把手机落在出租车上了 (还好之后找回来了),导致我前两天 ...