<p>Hola a todos. En este artículo mostraré un ejemplo sencillo sobre como copiar, borrar y saber el tamaño de un archivo en C++.</p>
<p>Para esto utilizaremos la librería Filesystem de Boost ( www.boost.org ). Esta librería nos permitirá hacer muchas cosas con el sistema de archivos independientemente de la plataforma en la que la utilicemos.</p>
<p>Para lograr nuestro objetivo, tomaremos los parámetros que el usuario nos da al llamar al programa. Estos parámetros están guardados en el vector <strong>argv</strong> en la función main.</p>
<pre class="prettyprint"> int main( int argc, char **argv ) { ...</pre>
<p>El primer elemento de este vector ( argv[ 0 ] ), siempre es el nombre del programa que se está ejecutando. Entonces el comando a ejecutar ( copiar, borrar, tamaño ) estará en el segundo elemento de este vector ( argv[ 1 ] ) y las opciones para dicho comando estarán en los siguientes índices. Pensando en que es un programa en modo de consola, se llamaría de la siguiente forma:</p>
<pre class="prettyprint"> ./programa comando opciones</pre>
<p>Por ejemplo para copiar un archivo ( fuente.txt ) a un destino ( destino.txt ) sería así:</p>
<pre class="prettyprint"> ./programa copiar fuente.txt destino.txt</pre>
<p>Como verán en el código, estos parámetros los guardaremos en una instancia de la clase vector de la librería STL ( que seguramente tendrán instalada ... ). De esta forma es más sencillo de manipular los datos.</p>
<p>Luego para copiar, borrar y saber el tamaño de un archivo utilizamos las funciones copy_file, remove y file_size, respectivamente.</p>
<p>Aquí les dejo el código:</p>
<pre class="prettyprint">
using namespace boost::filesystem;
/**
/**
/**
Copia un archivo */ int FM::copiar( std::vector<std::string> parametros ) { // nos dieron los nombres de los archivo fuente y destino ? if( parametros.size() != 4 ) { mostrar_ayuda(); return 1; }
// existe el archivo que queremos copiar ? if( ! exists( parametros[ 2 ] )) { std::cout << "Parece que el archivo " << parametros[ 2 ] << " no existe." << std::endl; return 1; }
// el archivo destino existe ? Se está intentando sobreescribirlo ? if( exists( parametros[ 3 ] )) { // en este ejemplo no reemplazaremos el archivo. Simplemente le avisamos al usuario. std::cout << "Ya existe un archivo con el nombre " << parametros[ 3 ] << "." << std::endl; return 1; }
// se copia el archivo copy_file( parametros[ 2 ], parametros[ 3 ] ); std::cout << "Se ha copiado el archivo: " << parametros[ 2 ] << ", en el destino: " << parametros[ 3 ] << std::endl; return 0; }
/**
/**
/**
Procesa el comando ingresado por el usuario al comenzar el programa. */ int FM::procesar_comando( int argc, char **argv ) { // Nos dieron el nombre del comando ? if( argc <= 1 ) { mostrar_ayuda(); return 1; }
// pasamos todos los parámetros a un nuevo vector // así será más fácil manipularlo std::vector<std::string> parametros; for( short a = 0; a < argc; a++ ) parametros.push_back( argv[ a ] );
// ejecutamos el comando que nos hayan pedido if( parametros[ 1 ] == "copiar" ) return copiar( parametros ); if( parametros[ 1 ] == "borrar" ) return borrar( parametros ); if( parametros[ 1 ] == "tamaño" ) return tamano( parametros );
// si el programa llega hasta aquí es porque el comando no existe. mostrar_ayuda(); return 1; }
/**
<p>Voto positivo si te parece útil. Saludos a todos!</p>