Pascal/Turbo Pascal - Copiar archivos en pascal !

 
Vista:
sin imagen de perfil

Copiar archivos en pascal !

Publicado por Mechanic (177 intervenciones) el 15/06/2007 23:30:35
Saludos a todos !

No se si existe alguna función para copiar archivos y directorios en Turbo Pascal
Si alguien me puede ayudar con esto, se lo voy a agradecer bastante.

Sigan programando !
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Copiar archivos en pascal !

Publicado por Diego Romero (996 intervenciones) el 16/06/2007 04:21:25
No hay en TP una función o procedimiento estandar para copiar/mover archivos, hay que programarla. Para ello lo mejor, si no conoces el formato del archivo es usar los procedimiento BlockRead() y BlockWrite() que leen y escriben archivos sin tipo, es decir se leen y escriben bloques de bytes arbitrarios.
Para procesar la lista de archivos de un directorio te sugiero consultar la ayuda de FindFirst() o FindNext().

En mi página web en la sección Programación->Turbo Pascal tengo un programa de ejemplo para copiar archivos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Copiar archivos en pascal !

Publicado por Mechanic (177 intervenciones) el 17/06/2007 20:14:35
Gracias Diego Romero.

He descargado tu programa y funciona muy bien.
Ahora solo tengo que examinarlo bien para poder copiar archivos desde un
programa que yo debo hacer porque mi objetivo es:

Realizar un programa que copie archivos de imagenes (mpg) de una Pc a otra Pc conectadas en red.

Hay unas cámaras grabando videos en un centro y las personas que monitorean estas deben hacer el backup para que los archivos queden en la otra máquina pero no están capacitadas ni para copiar y pegar archivos y carpetas en Windows.

Que porqué no hago simplemente un .bat end DOS ?
je je. Yo quería hacerlo en Pascal pues yo recuerdo que había una función que permitía llamar a una función de DOS talves con pascal 3 o 5.5 aunque no estoy seguro. Algo similar a esto:

HagaEsto(dir) o HagaEsto(copy algo.txt c:\windows) o HagaEsto(cls) .
Pero obviamente estoy equivocado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar archivos en pascal !

Publicado por Diego Romero (996 intervenciones) el 18/06/2007 19:53:22
Sí. El procedimiento que buscas para ejecutar comandos de DOS es Exec() pero debes tener algunas precauciones antes. Lee la ayuda del procedimiento.

Ahora estaba pensando... sin desmerecer tus ganas de aprender Turbo Pascal ¿no sería mejor que ese programa específico lo hagas usando un lenguaje para Windows tal como Delphi?. Porque el problema que veo al hacerlo en un lenguaje para DOS como Turbo Pascal es que debes mapear una unidad de disco mientras que usando un lenguaje para Windows no es necesario, basta con saber el nombre del equipo remoto y su recurso compartido.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Copiar archivos en pascal !

Publicado por Mechanic (177 intervenciones) el 18/06/2007 23:43:38
Excelente!
Diego Romero.
Yo quería encontrar tal procedimiento. Y es que solo buscándolo en el help sin saber cómo se llama no se puede porque son muchísimas las funciones y revisarlas una a una.. ?

Y en cuanto a lo de utilizar un lenguaje en ambiente Windows como Delphi que es el hijo de pascal, me parece buena idea.
La verdad es que yo planeaba crear una unidad virtual y decirle al programa:

copy C:\videos\*.* Z:\backup donde Z: es una unidad de red que se refiere a la uniddad C: del otro equipo.

Pero en realidad tienes razón porque además está el inconveniente de que el formato de los archivos a copiar es mpeg y con nombres largos. Entonces el DOS me va a truncar los nombres de los archivos.

Creo que el Pascal tiene sus límites y me veo en la necesidad de Aprender Delphi.
Auún así me alegra tener a mi disposición el procedimiento exec().

Una vez más agradezco tu atención!
Hasta luego!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar archivos en pascal !

Publicado por Diego Romero (996 intervenciones) el 19/06/2007 20:42:59
Cierto. No había considerado tampoco el problema de los nombres largos.
Suerte con Delphi ;).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Copiar archivos en pascal !

Publicado por Mechanic (177 intervenciones) el 20/06/2007 21:23:38
Diego Romero:

Hice un programa para copiar un directorio con sus subdirectorios a otra carpeta
en Windows 98, y funciona perféctamente incluso los nombres largos no fué un problema

porque en lugar de escribir : xcopy /s C:\Archivos de programa\Microsoft office...
puse: xcopy /s C:\Archiv~1\Micros~1\Algo C:\prueba
Cuando vuelves a Windows y revistas la carpeta C:\Prueba , los nobres largos están bién.

pero en WindowsXP no funciona. Lo extraño es que si haces clic en inicio - ejecutar y tecleeas "command" para entrar al DOS y escribes la línea de comandos:

copy /s C:\Algo C:\Algo2 Esto funciona perféctamente. (xcopy /s te copia un directorio con todos sus subdirectorios a la carpeta especificada.
Como el comando Copy.exe no lo vas a encontrar en ninguna parte del disco duro, (creo que se carga en memoria con el command.com), para hacer esto desde pascal, la línea de comandos debe quedar así: command /c xcopy /s C:\Algo C:\Algo2.

En el help del command dice:
Command /c ejecuta el comando especificado y vuelve
Command /k ejecuta el comando especificado y sigue ejecutándose (el DOS).

Esto lo puedes teclear desde el DOS y también funciona, pues te digo que en Windows98 me funcionó muy bien. Ahora tu sabes que en XP, el archivo Command.com está en C:\Windows\System32\command.com y en 98 está en C:\Windows\Command\Command.com.

Program execw;

{$M $4000,0,0 } { stack de 16K, sin heap } { Esta línea la saqué del help de Exec }

Uses Crt, Dos;
var Ruta, LineaComando : string;
begin

Ruta := 'C:\Windows\System32\Command.com';
LineaComando := 'Command /C Xcopy /S C:\Algo C:\New';
Exec(Ruta,LineaComando);

end.

Al presionar ALT + F5 Puedo ver que lo último que mostró la pantalla de DOS dice:

"Directorio incorrecto especificado para la búsqueda de COMMAND
Comando o nombre de archivo erróneo."

Entonces no se poqué no funciona..
Te comento esto para la curiosidad de todos.
Saludos de nuevo !
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Copiar archivos en pascal !

Publicado por Diego Romero (996 intervenciones) el 23/06/2007 07:07:46
Hasta Windows 98/Me todavía existía la variable de entorno CONSPEC la cual contiene el path + el nombre del procesador de comandos (o sea el command.com), no sé si XP aún lo conserva, supongo que sí.

Ahora bien, el command.com creo que no existe en XP, quizá debas ejecutar el cmd.exe como procesador de comandos.

Una aclaración, las variables de entorno del MS-DOS son eso, variables, que contienen valores accesibles desde cualquier programa. En Turbo Pascal existe una función en la bibloteca estadar DOS GetEnv() que devuelve el valor de la variable de entorno especificada como parámetro.
En tu caso deberías hacer algo así:

SwapVectors;
Exec(GetEnv('CONSPEC'),'copy /c fuente.ext destino.ext');
SwapVectors;
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar