#include <stdio.h>
#include <iostream>
using namespace std;
class BadSrcFile{};
class BadDestFile{};
class BadCopy{};
int my_cp(const char * src_file, const char * dest_file)
{
FILE * in_file, *out_file;
in_file = fopen(src_file, "rb");
if(in_file == NULL)
{
return 1;
}
out_file = fopen(dest_file, "wb");
if (out_file == NULL)
{
return 2;
}
char rec[256];
size_t bytes_in, bytes_out;
while(bytes_in = fread(rec, 1, 256, in_file))
{
bytes_out = fwrite(rec, 1, bytes_in, out_file);
if (bytes_in != bytes_out)
{
return 3;
}
}
fclose(in_file);
fclose(out_file);
return 0;
}
int my_cp2(const char * src_file, const char * dest_file)
{
FILE * in_file, *out_file;
in_file = fopen(src_file, "rb");
if(in_file == NULL)
{
throw 1;
}
out_file = fopen(dest_file, "wb");
if (out_file == NULL)
{
throw 2;
}
char rec[256];
size_t bytes_in, bytes_out;
while(bytes_in = fread(rec, 1, 256, in_file))
{
bytes_out = fwrite(rec, 1, bytes_in, out_file);
if (bytes_in != bytes_out)
{
throw 3;
}
}
fclose(in_file);
fclose(out_file);
}
int my_cp3(const char * src_file, const char * dest_file)
{
FILE * in_file, *out_file;
in_file = fopen(src_file, "rb");
if(in_file == NULL)
{
throw "打开源文件时出错!";
}
out_file = fopen(dest_file, "wb");
if (out_file == NULL)
{
throw "打开目标文件时出错!";
}
char rec[256];
size_t bytes_in, bytes_out;
while(bytes_in = fread(rec, 1, 256, in_file))
{
bytes_out = fwrite(rec, 1, bytes_in, out_file);
if (bytes_in != bytes_out)
{
throw "拷贝文件时出错!";
}
}
fclose(in_file);
fclose(out_file);
}
int my_cp4(const char * src_file, const char * dest_file)
{
FILE * in_file, *out_file;
in_file = fopen(src_file, "rb");
if(in_file == NULL)
{
throw BadDestFile();
}
out_file = fopen(dest_file, "wb");
if (out_file == NULL)
{
throw BadDestFile();
}
char rec[256];
size_t bytes_in, bytes_out;
while(bytes_in = fread(rec, 1, 256, in_file))
{
bytes_out = fwrite(rec, 1, bytes_in, out_file);
if (bytes_in != bytes_out)
{
throw BadCopy();
}
}
fclose(in_file);
fclose(out_file);
}
int main()
{
try
{
my_cp2("1.txt", "2.txt");
my_cp3("1.txt", "2.txt");
my_cp4("11.txt", "2.txt");
}
catch(int e)
{
printf("发生异常:%d\n", e);
}
catch(const char *e)
{
printf("%s\n", e);
}
catch(BadSrcFile e)
{
printf("发送异常:打开源文件时出错!\n");
}
catch(BadDestFile e)
{
printf("发送异常:打开目标文件时出错!\n");
}
catch(BadSrcFile e)
{
printf("发送异常:拷贝文件出错!\n");
}
catch(...)
{
printf("其他异常!\n");
}
printf("Ok!\n");
return 0;
}