#include
#include
#include
#define BUFFSIZE 1204//内存大小
using namespace std;
int copyfile(const char* txt1, const char* txt2) {
FILE* fp1 = NULL, * fp2 = NULL;
fopen_s(&fp1, txt2, "rb");//fpq读取txt2路径文件rb只读
if (fp1 == NULL) {
throw new string("文件不存在");
}
fopen_s(&fp2, txt1, "wb");//fp2写入txt1路径文件rb只写
if (fp2 == NULL) {
throw new string("写不进文件");
}
char Buff[BUFFSIZE];
int readlen, writelen;
while ((readlen = fread(Buff, 1, BUFFSIZE, fp1)) > 0) {//fread成功返回1进行循环
writelen=fwrite(Buff, 1, readlen, fp2);//循环写
if (readlen != writelen) {//任何一个出错时报错
throw new string("复制文件出错");
}
}
fclose(fp1);
fclose(fp2);
return 0;
}
int main() {
int red;
try{
red = copyfile("E:/C++demo/读写文件异常处理/txt11.txt",
"E:/C++demo/读写文件异常处理/txt22.txt");
}
catch (string *error) {
printf("捕捉到异常:%s\n", error->c_str());
delete error;
}
return 0;
}
二进制文件读写两个重要的函数 , fread 和 fwrite , fread 用于读取文件 , fwrite 用于写出文件 ;
fread / fwrite 函数 既可以操作 二进制文件 , 又可以操作 文本文件 ;
getc / putc 函数 , fscanf / fprintf 函数 , fgets / fgets 函数 , 只能用于操作 文本文件 ;
fread 函数作用 : 从文件中读取若干字节数据到内存缓冲区中 ;
size_t fread( void *buffer, size_t size, size_t count, FILE *stream );
1>void *buffer 参数 : 将文件中的二进制数据读取到该缓冲区中 ;
2>size_t size 参数 : 读取的 基本单元 字节大小 , 单位是字节 , 一般是 buffer 缓冲的单位大小 ;
如果 buffer 缓冲区是 char 数组 , 则该参数的值是 sizeof(char) ;
如果 buffer 缓冲区是 int 数组 , 则该参数的值是 sizeof(int) ;
3>size_t count 参数 : 读取的 基本单元 个数 ;
4>FILE *stream 参数 : 文件指针 ;