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

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

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. SAP物料类型

    1.物料主数据界面设置行业领域默认值并隐藏行业领域 2.物料类型设置:主要控制视图需要维护的部门,是否可以采购,及是否进行数量或者价值更新等操作 spro --> 后勤常规--> 物料主数 ...

  2. sprinboot多个子模块下 依赖包没有找到 解决方案

    最近因为在使用springboot开发项目,在开发过程中,发现自己的子模块导入通用的模块 在启动中 说找不到这个类 百度下 说我要在pom文件下 pulus 插件 那里 加上这段代码 <conf ...

  3. 高精度计算_vector

    #include<bits/stdc++.h> using namespace std; // return a+b; vector<int> add(vector<in ...

  4. jmeter参数化时最常用随机函数

    邮箱类: ${__RandomString(8,abcdefghijklmnopqrstuvwxyz,)}@126.com 手机号类: ${__Random(18000000000,189999999 ...

  5. 渗透测试工具&导航合集

    #前言 表哥们一般都有自己强大的工具库,今天我也稍作整理,分享交流出来一部分 #信息收集 ####dirbuster kali自带的一款工具,fuzz很方便 ####gorailgun 一款自动化做的 ...

  6. Python-pytest -> Selenium之异常处理

    Selenium之异常处理: 引用的库:(可以查看库里提供的异常类) from selenium.common.exceptions import ElementNotVisibleException ...

  7. 音标s ed

    1 p /s/ cups  2 t /s/ hats puts3 k /s/ cakes books desks works worked /t/4 f /s/ roofssiz ziz s加其他清辅 ...

  8. ubuntu上安装meson & 如何使用meson编译C代码

    一· 搭建meson环境并简单编译: 1. 什么是meson Meson 旨在开发最具可用性和快速的构建系统.提供简单但强大的声明式语言用来描述构建.原生支持最新的工具和框架,如 Qt5 .代码覆盖率 ...

  9. 【Delphi7官方镜像版】delphi_7_ent_en官方镜像 阿里云盘

    [Delphi7官方镜像版]「delphi_7_ent_en官方镜像.iso.exe」https://www.aliyundrive.com/s/Du9C4XfZfwG 点击链接保存,或者复制本段内容 ...

  10. c++ 保存txt文件

    #include <iostream> #include <stdio.h> #include <fstream> #include <queue> # ...