首页 > 编程语言 >C/C++ 异常处理机制(例:文件拷贝)

C/C++ 异常处理机制(例:文件拷贝)

时间:2023-01-10 17:56:02浏览次数:48  
标签:文件 ... int C++ try printf catch 拷贝 异常

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

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

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

相关文章

  • 【shell】shell字符串分割|文件分割|剪切|截取 (转)
    目录一、字符串分割1、awk分割2、利用shell中变量的字符串替换成空格分割3、设置分隔符,通过IFS变量4、利用tr指令实现字符替换二、文件分割按行切割按时间切......
  • 算法与数据结构高手养成-求职提升特训课(提供C++Java+Python 3大主流语言源码)
    ​​点击下载:算法与数据结构高手养成-求职提升特训课(提供C++Java+Python3大主流语言源码)​​  提取码:br1p《算法与数据结构高手养成-求职提升特训课》,一共17章,课程提供......
  • web自动化测试-文件上传与弹框处理
    实战演示文件上传input标签使用自动化上传,先定位到上传按钮,然后send_keys把路径作为值给传进去.如图所示,是企业微信文件上传的页面定位到标签为input,type为file的元......
  • 【c&c++】socket编程中的 htons()
      在刚刚接触socket时,遇到了htons()函数,就直接懵逼了,这是什么东西,有什么用?就查了一些资料。  htons()是网络字节序与主机字节序之间转换的函数。用生活中的例子来......
  • C++ 中的 const 限定符
    const需要与“常量”这个说法做一个区分。const就是const,常量是常量,有时候可以通用,但有时候又不能混淆。const限定符const修饰的对象的值不能被改变。可以用来提......
  • git未忽略文件检测不到?
    速览#查看所有被忽略提交的文件gitstatus--ignored#将被忽略提交的文件加入暂存区gitadd-f<文化名>场景想要提交opencv_world460d.lib到git中,git检测不到。......
  • Linux 使用模式匹配文件名批量删除文件
    举例1:删除文件名中包含abc的文件#先列出来确认一下find./dir-typef-name'*abc*'#执行删除命令find./dir-typef-name'*abc*'-delete举例2:删除文件名......
  • 关于Unity的Android工程,写文件的问题
    UnityAndroid工程中的写文件在安卓工程下,写入文件可以直接用:File.WriteAllText(UnityEngine.Application.persistentDataPath+"/XXX.txt","文件内容");路径前面没有加“......
  • C++笔试题汇总二
    C++笔试题一1.以下三条输出语句分别输出什么?[C易]charstr1[]="abc";charstr2[]="abc";constcharstr3[]="abc";constcharstr4[]="abc";constchar*str5......
  • DBeaver导入SQL脚本时报:无法加载文件 Input length = 1
    DBeaver导入原来保存的sql文件出错查询到一解决方法:项目中General-Scripts-右键选择属性-文本文件编码从默认的从容器继承(UTF-8)改为其它,选UTF8-应用并关闭但是没有解......