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的异常机制,提高 ...
随机推荐
- DevExpress各大版本支持的VS版本和支持的.net版本图
如下图所示,绿色Yes代表支持,红色No代表不支持.对于有些人觉得装了dev后,vs工具箱没有,一般都是以下两大问题:1.要么你的Dev的版本不支持你当前的VS版本,没有很正常.2.要么你的项目的.n ...
- java 守护线程的关闭
在进程内所有用户线程 全部消亡后,如果 守护线程仍在执行 ( 注意: 守护线程并不是一直运行中,守护线程中的代码执行完毕,则守护线程自然消亡. ),则会被强制消亡.
- C语言学习--练习--合并两个字符串
将两个字符串合并追加在一起, 类似于python的str1+str2 #include<stdio.h> #include<string.h> #include<stdl ...
- jenkins 设置Git SSH凭证后,构建Git更新报错returned status code 128解决
报错问题如下: Failed to connect to repository : Command "git ls-remote -h git@IP地址:python/django.git ...
- GIT 上传文件出错:fatal: Could not read from remote repository. 解决方案
问题 git push -u origin master 执行后报错 fatal: Could not read from remote repository. 解决方案 1. git执行 git ...
- Python生成whl文件
下载源码包,生成whl文件 python setup.py bdist_wheel
- VUE2.0 脚手架搭建项目,如何配置本地IP地址访问项目,详解
1.首先找到config文件夹目录下的 index.js文件 // Various Dev Server settings //host: 'localhost' //将localhost进行替换成 ...
- socket 客户端发送命令
import socket import sys import os,time reload(sys) sys.setdefaultencoding('utf8') def send_cmd(comm ...
- 循环for in 和for of
for in 和for of都是前端循环工具 我平时用for in比较多一点 但是今天来看一下两者的区别 先声明一个对象和一个数组 分别使用for in和for of分别查看得到的结果 var arr ...
- Win10家庭版找不到组策略gpedit.msc怎么解决?
链接:https://pan.baidu.com/s/1SoSWCfHwZhD3tV4C7DcirA 提取码:okfm 1.下载文件 2.以管理员身份运行 3.