[SOURCE-CODE] DDMM (Dummy Drive Mirror Maker)

Iniciado por Eleкtro, 2 Febrero 2018, 16:36 PM

0 Miembros y 1 Visitante están viendo este tema.

Eleкtro



DDMM (Dummy Drive Mirror Maker)

by Elektro Studios

Dummy Drive Mirror Maker, o simplemente DDMM, es una sencilla herramienta para crear una copia espejo de un directorio o disco duro, a otro directorio distinto.

La característica peculiar de este programa es que la copia espejo consiste en archivos "nulos" o dummies, es decir, archivos de cero bytes. La finalidad de esto es crear una copia espejo de la estructura de archivos de un directorio o disco duro, que no ocupe tamaño en disco, para diversos propósitos.

Si el programa detecta una colisión entre archivos, preguntará al usuario que hacer.

Es una herramienta práctica, segura, y sencilla de usar.




Imágenes
















Demostración

[youtube=640,360]https://www.youtube.com/watch?v=EE-HEPyt5tA[/youtube]




Descarga

El código fuente ( desarrollado en el lenguaje VB.NET ) y la aplicación compilada lo pueden descargar en el siguiente repositorio de GitHub:


PD: en el código fuente encontrarán bastante contenido recortado y gratuito de mi framework comercial ElektroKit, el cual se puede rehutilizar para otros proyectos. ¡¡consideren comprarlo aquí abajo en mi firma de usuario!!!. :P

¡¡ QUE LO DISFRUTEN !!








engel lex

En este caso  para que se usan los dummy files en windows?
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Eleкtro

#2
Cita de: engel lex en  2 Febrero 2018, 18:32 PMEn este caso  para que se usan los dummy files en windows?

Como ya sabrás, a un archivo dummy se le puede asignar cualquier tamaño "falso" (1 MB, 1 GB, 1 TB, etc) en cuestión de segundos, un ejemplo malicioso de esto sería ocupar todo el espacio del disco duro de la "víctima".

Pero por supuesto ese no es el caso, este programa crea una copia/réplica/"clón" o como lo quieras llamar de una estructura de archivos y directorios creando archivos dummy de cero bytes. ¿Para qué puede servir esto?, pues para cualquier uso que a un usuario se le pueda ocurrir, yo en mi caso personal necesito hacer ese tipo de copia por que sirve como un listado interactivo de mi disco duro, me refiero, si comprimes la copia generada (todo) en un archivo zip, el usuario lo puede descomprimir y puede usar el explorador de Windows para navegar por los directorios y ver la estructura de archivos del disco duro y tal, como si estuvieras navegando en el disco duro original, solo que con archivos de cero bytes, entonces eso luego lo envío y lo utilizo como una alternativa más interactiva a un simple listado de archivos y directorios. No se si me habré explicado muy bien.

Saludos!








engel lex

si, se entiende, tiene sentido y suena apropiado
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

Serapis

¿Cómo has resuelto los enlaces dinámicos?.

Eleкtro

#5
Cita de: NEBIRE en  4 Febrero 2018, 14:12 PM¿Cómo has resuelto los enlaces dinámicos?.

Pues gracias por mencionarlo, no se me ocurrió la idea o la circunstancia de añadir soporte para enlaces simbólicos. No pretendo que lo siguiente suena a excusa, creo que es una gran responsabilidad compartir un programa para otras personas, pues hay que tener en cuenta los escenarios y necesidades de los demás, pero principálmente desarrollé la aplicación para cubrir mis necesidades personales, y luego la compartí por si le podía servir a alguien más y no se me ocurrió lo de los enlaces simbólicos sencillamente por que no lo necesitaba y no se me pasó ni por la cabeza, simplemente utilizo las funciones DirectoryInfo.EnumerateDirectories() y DirectoryInfo.EnumerateFiles() para devolver los directorios y archivos de cada directorio, incluyendo los enlaces simbólicos (y uniones/junctions) a directorios o archivos, que se copian como archivos dummy de cero bytes como si se tratase de un archivo normal y no un enlace simbólico.

Pero ahora que lo has mencionado, implementaré ese tipo de funcionalidad para identificar enlaces simbólicos y dejar que el usuario decida que hacer (ignorarlos, copiarlos como archivos dummy, o copiarlos como accesos directos o crear el enlace simbólico equivalente al copiar), le añadiré esa funcionalidad y para la siguiente release estará listo.




Con respecto a como resolverlo, primero hay que comprobar si el elemento tiene asignado un Reparse Point verificando el atributo FileAttributes.ReparsePoint, y en caso positivo leer la estructura de datos del reparse point para obtener el tag que identifica el tipo de datos del reparse point, ese identificador es con el que poder determinar si se trata de un enlace simbólico (o un directorio de montaje, u otra cosa). Aquí tienes información al respecto si le quieres echar un vistazo:


Si tienen alguna otra sugerencia para este programa, ¡bienvenida sea!.

Saludos!








Serapis

#6
Ya, si yo te lo decía, por simple curiosidad, es algo que a la mayoría de programas que recontruyen un árbol de rutas, se les escapa...

Yo le veo una utilidad igualmente interesante (que he utilizado desde hace muchos años, también enumerando flcheros y carpetas pero con las APÎ, desde vb6), y es conocer con exactitud que ficheros instala un programa determinado. Para ello, se ejecuta el programa antes de la instalación y posterior a la instalación (mejor con reinicio y ejecución y luego parado, pués todavía pueden crearse ficheros y carpetas en tal situación como propias de la instalación y primera ejecución).
Luego una opción compara ambos árboles reconstrueyndo un tercero con las diferencias (esto es, lo que ha instalado y donde). Es útil, cuando sospechas que algún programa instala cosas que no documenta y no vienen a cuento con la supuesta funcionalidad del programa... también para ver posibles instrusiones de virus, aunque en esos casos determinadas carpetas (temporales) es razonable que sea difícil de controlar.

Como sugerencia, así de pronto se me ocurren 2:
- Viendo el vídeo demostrativo del programa, observo que te ha sucedido que si ya existe en destino, te pregunta, sería acertado una opción en ese instante que diga: aplicar la opción elegida para los sucesivos casos con el mismo 'problema', o bien dejarlo como una opción más previo al inicio: Que hacer si ya existe en destino?: sobrescribir, ignorar, etc...
- La otra sugerencia es una 'actualización incremental', es decir reconstruir todo el árbol en destino, pero donde el destino ya existe dicha estructura, en este caso, al ser incremental, veo dos opciones (si se funden ambas, sería lo mismo que reconstruirlo nuevo)
---- A: Recorre origen y si ya existe en destino lo deja tal cual y solo añade (a destino obviamente) lo nuevo.
---- B: Recorre destino y si ya no existe en origen, lo elimine de destino.

p.d.:
También añadiría algún mensaje indicando que no altera nada en origen... los curiosos (con escasos conocimientos) a menudo dudan en usar algo por temor a que les daño algo en origen.

Eleкtro

Bueno, atendiendo a algunas sugerencias aquí llega la nueva release 1.1 con las siguientes modificaciones:


  • Soporte para detectar e ignorar automaticamente la papelera de reciclaje en sistemas operativos anteriores a Windows VISTA.

  • Soporte para la detección de enlaces simbólicos y puntos de montaje.
    Nota: por defecto el programa ignorará cualquier punto de montaje, dicho de otra manera: no se copiarán.

  • Añadida una nueva opción en la interfaz de usuario para elegir si copiar o ignorar los enlaces simbólicos encontrados.


  • Mejorado el procedimiento interno de ordenación de archivos y carpetas (ordenación de A a Z).

Eso es todo.

Saludos!