Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

file_help.cpp

Go to the documentation of this file.
00001 /*
00002 **  ClanLib SDK
00003 **  Copyright (c) 1997-2005 The ClanLib Team
00004 **
00005 **  This software is provided 'as-is', without any express or implied
00006 **  warranty.  In no event will the authors be held liable for any damages
00007 **  arising from the use of this software.
00008 **
00009 **  Permission is granted to anyone to use this software for any purpose,
00010 **  including commercial applications, and to alter it and redistribute it
00011 **  freely, subject to the following restrictions:
00012 **
00013 **  1. The origin of this software must not be misrepresented; you must not
00014 **     claim that you wrote the original software. If you use this software
00015 **     in a product, an acknowledgment in the product documentation would be
00016 **     appreciated but is not required.
00017 **  2. Altered source versions must be plainly marked as such, and must not be
00018 **     misrepresented as being the original software.
00019 **  3. This notice may not be removed or altered from any source distribution.
00020 **
00021 **  Note: Some of the libraries ClanLib link to may have additional
00022 **  requirements or restrictions.
00023 **
00024 **  File Author(s):
00025 **
00026 **    Magnus Norddahl
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 // CL_FileHelp Operations:
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 }

Generated on Sat Feb 19 22:51:16 2005 for npcore by  doxygen 1.4.1