异常是一种程序控制机制,与函数机制互补。
函数是一种以栈结构展开的上下函数衔接的程序控制系统,异常是另一种控制结构,它可以在出现“意外”时中断当前函数,并以某种机制(类型匹配)回馈给隔代的调用者相关的信息。
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; }
标签:文件,...,int,C++,try,printf,catch,拷贝,异常 From: https://www.cnblogs.com/smartlearn/p/17040980.html