Universidad de Costa Rica
Escuela de Ciencias de la
Computación e Informática
Profesor Adolfo Di Mare
CI-1201
II Semestre 2008
[<=] [home] [<>] [\/] [=>]
CI-1201 Programación II

Tarea #5 [solución]

Sincronizador de archivos

      El objetivo de esta tarea programada es forzarle a usar especificación en lugar de implementación de la clase lista.

Directorio de C:\CI-1201\2008-2

10/Ago/2008  11:17a   <DIR> .
10/Ago/2008  11:17a   <DIR> ..
27/Jun/2008  11:50a  23.744 toc.htm
16/Abr/2008  01:36p  16.396 p2-ta-1.htm
16/Abr/2008  01:56p  10.278 p2-ta-2.htm
16/Abr/2008  08:34p   8.947 p2-ta-3.htm
21/May/2008  10:48a  16.656 p2-ta-4.htm
27/Jun/2008  11:52a   5.526 p2-ta-5.htm
27/Jun/2008  11:52a   4.234 p2-ta-6.htm
        7 archivos    85.781 bytes
Directorio de D:\CD\Respaldo\2008-2

10/Ago/2008  11:18a   <DIR> .
10/Ago/2008  11:18a   <DIR> ..
27/Jun/2008  11:50a  23.744 TOC.HTM
28/May/2008  05:52p   8.039 p2-ea-1.htm
15/Jun/2008  09:00a   9.844 p2-ea-2.htm
30/Jun/2008  10:55a   9.220 p2-ea-f.htm
10/Ago/2008  11:18a   4.234 P2-TA-6.HTM
        5 archivos    55.081 bytes
Figura 1

      En esta trabajo usted escribirá un programa genera un archivo de comandos que permite sincronizar dos subdirectorios, de manera que el segundo quede como copia exacta del primero, pero tratando de minimizar la cantidad de copias de archivos.

      En la Figura 1 se muestra dos directorios, a la iquierda y a la derecha, que corresponden a los datos almacenados en el disco duro y en una unidad de respaldo. Para sincronizarlos, hay que lograr que el directorio de la derecha, de respaldo, contenga exactamente los mismos archivos que el directorio fuente, que está a la izquierda. Una forma de sincronizar los dos directorios usando fuerza bruta es borrar completamente el directorio de la derecha, y luego copiarle encima todo el contenido del directorio de la izquierda, como sigue:

C:\> D:
D:\> CD D:\CD\Respaldo\2008-2
D:\CD\Respaldo\2008-2> deltree /y .
D:\CD\Respaldo\2008-2> xcopy /e /s C:\CI-1201\2008-2 D:\CD\Respaldo\2008-2\

      Usar su programa SYNC.exe es una mejor solución. Para ejecutar su progama hay que usar el siguiente comando:

C:\> CD \CI-1201\2008-2
C:\DIR\SubDir> SYNC.exe "C:\CI-1201\2008-2" "D:\CD\Respaldo\2008-2"
usted obtendrá creará un archivo llamado SYNC.bat que contendrá las siguientes instrucciones:

:: SYNC.bat: Sincroniza C:\CI-1201\2008-2 ==> D:\CD\Respaldo\2008-2
@echo off

:: Crea el directorio destino si no existe
if not exist "D:\CD\nul"                  md "D:\CD"
if not exist "D:\CD\Respaldo\nul"         md "D:\CD\Respaldo"
if not exist "D:\CD\Respaldo\2008-2\nul"  md "D:\CD\Respaldo\2008-2"

:: Se posiciona en el directorio destino
D:
CD "D:\CD\Respaldo\2008-2"

:: Borrados
del "p2-ea-1.htm"
del "p2-ea-2.htm"
del "p2-ea-f.htm"
del "P2-TA-6.HTM"

:: Cambios de nombre
ren "TOC.HTM" "toc.htm"

:: Copias
xcopy "C:\CI-1201\2008-2\p2-ta-1.htm"   "D:\CD\Respaldo\2008-2"
xcopy "C:\CI-1201\2008-2\p2-ta-2.htm"   "D:\CD\Respaldo\2008-2"
xcopy "C:\CI-1201\2008-2\p2-ta-3.htm"   "D:\CD\Respaldo\2008-2"
xcopy "C:\CI-1201\2008-2\p2-ta-4.htm"   "D:\CD\Respaldo\2008-2"
xcopy "C:\CI-1201\2008-2\p2-ta-5.htm"   "D:\CD\Respaldo\2008-2"
xcopy "C:\CI-1201\2008-2\p2-ta-6.htm"   "D:\CD\Respaldo\2008-2"

:: "D:\CD\Respaldo\2008-2" es copia exacta de "C:\CI-1201\2008-2"
goto _out

:_out
:: SYNC.bat: Fin de archivo
del SYNC.bat /p
Figura 2

      El archivo de comandos SYNC.bat de la Figura 2 es una mejor alternativa que borrar y copiar todo de nuevo, porque se evita copiar aquellos archivos que son comunes a los dos directorios. La idea del programa SYNC.exe es tratar de minimizar la cantidad de copias, pues se supone que cada día quien hace el respaldo cambia pocos archivos, por lo que casi todos los archivos en el directorio fuente y de respaldo coincidirán. Si se ejecuta SYNC.bat se logra actualizar los pocos archivos que han sido modificados en el directorio fuente, y tal vez renombrar algunos otros hace falta. Al examinar la implementación de SYNC.bat se puede notar lo siguiente:

      Note que su programa genera el archivo "SYNC.bat", pero no lo ejecuta. Por eso, su programa nunca "interactúa" o "ejecuta" el comando XCOPY.exe de Windows. Más bien, su programa lee los nombres de los archivos de 2 directorios, el "directorio fuente" y el "directorio de respaldo", y que luego compara los nombres+atributos de ambos directorios con el fin de desplegar, posiblemente en pantalla, un reporte como el que aparece en la Figura 2.

      Por eso, su programa debe grabar el archivo "SYNC.bat" cuyo contenido se calcula al cotejar los nombres y atributos de los archivos de 2 directorios. Si el archivo "SYNC.bat" que su programa generó se ejecutara en la línea de comandos, el resultado sería que en el "directorio de respaldo" quedaría una copia exacta del contenido del "directorio fuente".

      Para ayudarle a aplicar los conceptos de abstracción, ocultamiento de datos y modularización usted deberá acatar los siguientes requerimientos en su implementación:

      La idea de implementar el programa SYNC.exe no es nueva, aunque tal vez sí lo sea hacerlo generando un archivo de comandos SYNC.bat. Algunos utilitarios para hacer este tipo de trabajo están disponibles en Internet:

      Entregue su tarea por correo electrónico, como lo hizo anteriormente.

[mailto:] Entrega de Tareas

Tiempo de entrega: 7 días
Entregue su documentación en la primera fecha, y luego entregue el programa completo en la segunda fecha.
Primera etapa: 3 días
Modalidad: En parejas

Soluciones

[mailto:] Adolfo Di Mare <adolfo@di-mare.com>.
Copyright © 2008
Derechos de autor reservados © 2008
[home] <> [/\]