00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "precomp.h"
00030 #include "file_help.h"
00031 #include "string_help.h"
00032 #include "exception.h"
00033 #include "file.h"
00034
00036
00037
00038 void CL_FileHelp::copy_file(const CL_String &from, const CL_String &to, bool copy_always)
00039 {
00040 #ifdef WIN32
00041 BOOL result = CopyFile(from.c_str(), to.c_str(), copy_always ? TRUE : FALSE);
00042 if (result == FALSE)
00043 throw CL_Exception(TEXT("Unable to copy file"));
00044 #else
00045 CL_File input_file(from, CL_File::open_existing);
00046 CL_File output_file(to, CL_File::create_always);
00047 char buffer[16*1024];
00048 while (true)
00049 {
00050 int bytes_read = input_file.read(buffer, 16*1024);
00051 if (bytes_read <= 0)
00052 break;
00053
00054 int bytes_written = output_file.write(buffer, bytes_read);
00055 if (bytes_written != bytes_read)
00056 {
00057 output_file.close();
00058 CL_FileHelp::delete_file(to);
00059 throw CL_Exception(TEXT("Unable to copy file"));
00060 }
00061 }
00062 #endif
00063 }
00064
00065 void CL_FileHelp::delete_file(const CL_String &filename)
00066 {
00067 #ifdef WIN32
00068 BOOL result = DeleteFile(filename.c_str());
00069 if (result == FALSE)
00070 throw CL_Exception(TEXT("Unable to delete file"));
00071 #else
00072 CL_StringA filename_local8 = CL_StringHelp::text_to_local8(filename);
00073 int result = unlink(filename_local8.c_str());
00074 if (result == -1)
00075 throw CL_Exception(TEXT("Unable to delete file"));
00076 #endif
00077 }