异常是一种程序控制机制,与函数机制互补。

函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它可以在出现“意外”时中断当前函数,并以某种机制(类型匹配)回馈给隔代的调用者相关的信息。

1.在异常发生第一现场,抛出异常
void function( ){
  //... ...
  throw 表达式;
  //... ...
}
2.在需要关注异常的地方,捕捉异常
try{
  //程序
  function();
  //程序
} catch(异常类型声明){
  //... 异常处理代码 ...
} catch(异常类型 形参){
  //... 异常处理代码 ...
} catch(...){ //其它异常类型
  //... 异常处理代码 ...
}
注意事项:
1.通过 throw 操作创建一个异常对象并抛掷
2.在需要捕捉异常的地方,将可能抛出异常的程序段嵌在 try 块之中
3.按正常的程序顺序执行到达 try 语句,然后执行 try 块{}内的保护段
4.如果在保护段执行期间没有引起异常,那么跟在 try 块后的 catch 子句就不执
行,程序从 try 块后跟随的最后一个 catch 子句后面的语句继续执行下去
5.catch 子句按其在 try 块后出现的顺序被检查,匹配的 catch 子句将捕获并按
catch 子句中的代码处理异常(或继续抛掷异常)
6.如果没有找到匹配,则缺省功能是调用 abort 终止程序。
提示:处理不了的异常,我们可以在 catch 的最后一个分支,使用 throw 语法,
继续向调用者 throw。
#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++ 异常处理机制(例:文件拷贝)的更多相关文章

  1. (java)从零开始之--异常处理(以文件拷贝为例)

    开发过程中避免不了对异常的处理,但是异常的处理又不能乱throw 下面是简单的抛异常处理 public static void CopyFile(String souFile,String dirFi ...

  2. Spring MVC—拦截器,文件上传,中文乱码处理,Rest风格,异常处理机制

    拦截器 文件上传 -中文乱码解决 rest风格 异常处理机制 拦截器 Spring MVC可以使用拦截器对请求进行拦截处理,用户可以自定义拦截器来实现特定的功能,自定义的拦截器必须实现HandlerI ...

  3. Java之异常处理机制

    来源:深入理解java异常处理机制 2.Java异常    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 ...

  4. 深入理解java的异常处理机制

     JAVA异常的概念    异常指不期而至的各种状况,如:文件找不到.网络连接失败.非法参数等.异常是一个事件,它发生在程序运行期间,干扰了正常的指令流程.Java通 过API中Throwable类的 ...

  5. 如何正确使用Java异常处理机制

    文章来源:leaforbook - 如何正确使用Java异常处理机制作者:士别三日 第一节 异常处理概述 第二节 Java异常处理类 2.1 Throwable 2.1.1 Throwable有五种构 ...

  6. .NET中的异常处理机制(一)

    1.异常处理的总体指导思想 学习C#中的异常处理机制,大概要了解以下几点: 首先,我们需要知道的事所有具体异常都是继承自System.Exception基类的. 其次,要熟悉FCL类库内置好的一些异常 ...

  7. C++ 异常处理机制的实现

    http://blog.jobbole.com/103925/ 本文深入讨论了VC++编译器异常处理的实现机制.附件源代码包含了一个VC++的异常处理库. 下载源代码 – 19 Kb 介绍 相对于传统 ...

  8. 理解java异常处理机制

    1. 引子 try…catch…finally恐怕是大家再熟悉不过的语句了,而且感觉用起来也是很简单,逻辑上似乎也是很容易理解.不过,我亲自体验的“教训”告诉我,这个东西可不是想象中的那么简单.听话. ...

  9. Objective-C try/catch异常处理机制原理。

    try-catch-finaly finally在任何情况下都会执行(不管有没有异常),属于整个体系的附属. 基本思想是跳到捕获锚点,重新执行. http://www.cnblogs.com/mark ...

  10. PCL中异常处理机制

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=287 本节我们主要讨论PCL在编写和应用过程中如何利用PCL的异常机制,提高 ...

随机推荐

  1. 如何把百度地图左边的搜索列表导出成excel里?

    有很多人问我,怎么样能够快速的把BAIDU地图左边的搜索列表里的商家地图,电话,导出到EXCEL里. 我就开发了一个小软件,专门为快速的实现导出数据到EXCEL. 为了使用方便,已经将全国的所又省份, ...

  2. 微信公众号 H5授权登录

    首先微信公众号 必须是服务号,订阅号没有 "网页授权获取用户基本信息" 没有这个权限.服务号也必须认证后才有这个权限

  3. JDBC之ResultSet和元数据

    ResultSet 从名字上就可以看到是结果集,表示的是查询出来的结果集. JDBC用ResultSet来封装结果集,查询结果表的对象. 查询结果分为两种情况: 单值 单个结果,比如说SQL如下: s ...

  4. Git中常见的一些问题总结

    Git中常见的一些问题总结 目录 Git中常见的一些问题总结 1.git添加到暂存区的修改,如果不想要了,怎么撤销 2.git添加到本地仓库,如果不想要了,怎么撤销 3.提交代码时发现别人已经提交了( ...

  5. 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组

    var threeSum = function(nums) {let ans = [];const len = nums.length;if(nums == null || len < 3) r ...

  6. java使用array是copyof创建新长度数组

    Arrays.copyof() int[] copied = Arrays.copyOf(arr, 10); //10 the the length of the new array System.o ...

  7. javaSE-验证码生成

    一.使用Math类的radom() 方法 //生成验证码 String verifcationCode = ""; for (int i = 0; i <= 5; i++) ...

  8. MYSQL实现排名函数RANK,DENSE_RANK和ROW_NUMBER

    1. 排名分类 1.1 区别RANK,DENSE_RANK和ROW_NUMBER RANK并列跳跃排名,并列即相同的值,相同的值保留重复名次,遇到下一个不同值时,跳跃到总共的排名. DENSE_RAN ...

  9. mysql数据库常用指令

    1.查询当前连接数据库别名 select database(); Current database 项显示当前连接的数据库 2.查询数据表中当天的数据 select * from 表名 WHERE T ...

  10. ANSYS Electronics Suite 19.2下载地址及其安装教程

    ANSYS Electronics Suite 19.2下载安装教程 1.下载地址https://getintopc.site/ansys-electronics-suite-19-2-free-do ...