#include <stdio.h>
#include <malloc.h>
//复制字符型文件
bool copy_char_file( const char* old_fn, const char* new_fn )
{
FILE* o_fp;
FILE* n_fp;
if( ( o_fp = fopen( old_fn, "r" ) ) == NULL || ( n_fp = fopen( new_fn, "w" ) ) == NULL )
{
return false;
}
char c;
while( ( c = getc( o_fp ) ) != EOF )
{
putc( c, n_fp );
}
fclose( o_fp );
fclose( n_fp );
return true;
}
long get_file_length( const char * fn )
{
FILE* fp;
if( ( fp = fopen( fn, "r" ) ) == NULL )
return 0;
fseek( fp, 0, SEEK_END );
long len = ftell( fp );
rewind( fp );
fclose( fp );
return len;
}
//复制二进制文件
bool copy_binary_file( const char* old_fn, const char* new_fn )
{
FILE* o_fp;
FILE* n_fp;
if( ( o_fp = fopen( old_fn, "rb" ) ) == NULL || ( n_fp = fopen( new_fn, "wb" ) ) == NULL )
{
return false;
}
int len = get_file_length( old_fn );
char *str = (char*)malloc( len );
size_t items = fread( str, 1, len, o_fp );
if( fwrite( str, 1, len, n_fp ) != items )
{
return false;
}
free( str );
fclose( o_fp );
fclose( n_fp );
return true;
}
int main( int argc, char *argv[] )
{
printf( "Please enter the filename which you want to copy:/n" );
char old_filename[ BUFSIZ ];
gets( old_filename );
printf( "Please enter the new filename:/n" );
char new_filename[ BUFSIZ ];
gets( new_filename );
if( !copy_binary_file( old_filename, new_filename ) )
{
printf( "copy failed" );
}
}