Página 1 de 1
Duda sobre File.Copy
Publicado: 11 Nov 2014 09:50
por erickmx20
Hola, espero que tengan un excelente dia, recientemente estoy incursionando en Autoplay Media Studio, pero aun no se como ocupar muchas de las acciones aunque comprendo superficialmente sus funciones. Pero lo que quiero hacer es copiar determinados archivos a esta carpeta al dar un click en un boton:
C:\Users\
USERNAME\AppData\Roaming\.minecraft\mods
Pero como sabran la ruta de username cambia dependiendo de la computadora y la sesion iniciada, asi que agradeceria mucho que me dijeran como es que consigo realizar esa operacion en autoplay.
Ejemplo Andres se descarga mi autorun y al dar click en ese boton los archivos se copian en su carpeta osea.
C:\Users\
Andres\AppData\Roaming\.minecraft\mods
De antemano agradezco su ayuda y espero que si se pueda hacer.

Publicado: 11 Nov 2014 14:17
por Luma
Pruebe con este código, a mi me ha funcionado muy bien en mis proyectos
File.Copy(_SourceFolder.."\\Autoplay\\Docs\\Respaldo".."\\*.*", "C:\\Respaldo", true, true, false, true);
No te olvides de cambiar rutas sin tocar las terminaciones después de - Respaldo - en la primer parte del script ,pues esta función hace que se copie por completo todo el contenido de una carpeta sin importar la extencion de sus archivos contenidos.
Se me olvidaba que si vas a mover para otra carpeta debes ejecutar un script para crear la carpeta donde irán las archivos finales, por el contrario no te copiara los archivos.
Un saludo desde la Capital de los Alumbrados MEDALLO
Publicado: 11 Nov 2014 14:33
por carsonzillo
Yo creo que estas preguntando exactamente como pillar la ruta del actual user en la que tiene la sesion de windows abierta a juzgar por el texto resaltado en rojo y luego hacer la copia, seria asi;
strCarpetaUser = Shell.GetFolder(SHF_APPLICATIONDATA);--esta es la ruta de la carpeta appData del usuario actual...
File.Copy(_SourceFolder.."\\Autoplay\\Docs\\Respaldo".."\\*.*", strCarpetaUser.."\\Roaming\\minecraft\\mods", true, true, false, true);
Y siguiendo los consejos que te ha dado Luma con eso te valdria la copia del archivo....Las rutas oficiales de Windows en carpetas de usuarios esta en la ayuda del programa.
Publicado: 11 Nov 2014 15:12
por Dow Sher

precisamente así como te dice el buen
carzoncillo
Publicado: 11 Nov 2014 21:08
por erickmx20
Hola, he intentado hacerlo como me dicen pero no consigo que se copie nada.
¿todo el codigo va en el script del boton al hacer click?
¿algo de ese codigo va en funciones globales?
Agradezco a todos los que me han ayudado pues busque y busque como obtener appdata en la guia de AMS y ahora al dar doble click ahi estaba y yo no me fije.
Publicado: 11 Nov 2014 21:45
por Luma
1 para que se copie hay que buscar la ruta de los archivos, si es una carpeta usa mi codigo y te lo hara perfectamente, solo que para que tenga el lugar de donde seran puestos los archivos copiados hay que crear una carpeta pa ello.
2 . si es un archivo la funcion es otra.
3 dele permisos a tu proyecto en setings, configuracion, requiere admin
Publicado: 11 Nov 2014 21:50
por Dow Sher
Muy bien, vamos por partes...
1.- ¿todo el codigo va en el script del boton al hacer click? Sí
2.- ¿algo de ese codigo va en funciones globales? No
AppDataFolder = Shell.GetFolder(SHF_APPLICATIONDATA); --Obtiene la ruta de la carpeta AppData\Roaming;
File.Copy(_SourceFolder.."AutoPlay\\Docs\\*", AppDataFolder.."\\.minecraft\\mods\\"); --Copia todos los archivos de la carpeta Docs
Si la carpeta seleccionada no existe no se copiara nada.
No es nada que una buena leída de la ayuda de AMS no pueda resolver.
Publicado: 11 Nov 2014 21:52
por Luma
Correcto Dowsher .
Mas bien no puede ser....
Saludos
Publicado: 12 Nov 2014 01:40
por erickmx20
Ya lo pude hacer, muchas gracias ahora tengo dudas sobre "callback" pero tendria que abrir una nueva pregunta para esto no? y dowsher gracias pero por mas que me leo esa guia me cuesta mucho trabajo entenderle, no se porque.
Publicado: 12 Nov 2014 02:13
por Luma
En programación de computadoras, una devolución de llamada o retrollamada (en inglés: callback) es una función "A" que se usa como argumento de otra función "B". Cuando se llama a "B", ésta ejecuta "A". Para conseguirlo, usualmente lo que se pasa a "B" es el puntero a "A".
Simplemente CallBack lo que hace es ejecutar otra operacion mientras hay otra en ejecucion, usa este codigo como ejemplo.
--INICIA LA FUNCION --- CALLBACK--PARA EL LLAMAMIENTO DE OTRAS FUNCIONES 3RAS
function CopyCallBack (sSource, sDestination, nCopied, nTotal,FileCopied,FileTotal)
finish = false;--SI SE FINALIZA POR ERROR NO SALDRA LA FUNCION LLAMADA Y NO MOSTRARA MENSAJE
TotalSize = String.GetFormattedSize(nTotal, FMTSIZE_MB, true); --ANALIZA EL TAMAÑO DE EL PESO DEL ARCHIVO COPIADO
CopiedSize = String.GetFormattedSize(nCopied, FMTSIZE_MB, true); --NO SE QUE HACE PERO ES REFERENTE A LO COPIADO JAJAJA
StatusDlg.SetMeterRange(0, Math.Floor((FileTotal/1024)*65534));-- INICIA EL DIALOGO DE COPIANDO DESDE POSICION CERO
StatusDlg.SetMeterPos(Math.Floor((FileCopied/1024)*65534));--MUESTRA EL ESTADO DE LA BARRA EN TAMAÑO SEGUN EL PESO DEL ARCHIVO
tCurrentFile = String.SplitPath(sSource);--NI IDEA QUE HACE PERO HACE REFERENCIA A LA CARPETA DE DONDE SE COPIARA
sCurrentFile = tCurrentFile.Filename .. tCurrentFile.Extension;--MUESTRA LAS EXTENCIONES DE LOS ARCHIVOS COPIADOS.
SourceEx = String.SplitPath(sSource);--NI IDEA QUE HACE....
DestinationEx = String.SplitPath(sDestination);--NI IDEA
DestinationFile = DestinationEx.Folder;--NI IDEA
StatusDlg.SetTitle("Titulo de la ventana");--TITULO DE LA VENTANA DE COPIANDO--
StatusDlg.SetMessage("Copiando datos: "..sCurrentFile.." \r\nDestino: "..DestinationFile);--TEXTOS MIENTRAS COPIA
StatusDlg.SetStatusText("Copiados: ".. CopiedSize.."/"..TotalSize);--MUESTRA EL TAMAÑO DE EL PESO DE ARCHIVOS MIENTRAS COPIA
if nCopied == nTotal then--ANALIZA LO COPIADO CON EL TOTAL DE LA CARPETA A COPIAR.
finish = true;--SI SE FINALIZA BIEN EL COPIADO ENTONCES
end
end
StatusDlg.Show(MB_ICONNONE, false);--NI IDEA QUE HACE PERO ES EL ICONO DE INFORMACION. STOP. OK ..JEJEJEJ
StatusDlg.SetAutoSize(false);--
File.Copy(_SourceFolder.."\\Autoplay\\Docs\\Ejempplo".."\\*.*", "C:\\Ejemplo", true, true, false, true, CopyCallBack);--ESTA LINEA ACTIVA LA FUNCION CALLBACK (CopyCallBack)
StatusDlg.Hide();--OCUALTA EL DIALOGO QUE ACTIVO CALBAK AUTOMATICAMENTE
if finish == true then--SI FINALIZA TODO MUY BIEN ENTONCES LANZA ESTE MENSAJE. PODES USAR UN SONIDO..UN TEXTO ES TU GUSTO.
Dialog.Message("Titulo de la ventana", "Exito del proceso de copiado !", MB_OK, MB_ICONINFORMATION, MB_DEFBUTTON1);
end--FINAL DEL CODIGO
Saludes desde Medellin
Publicado: 12 Nov 2014 03:02
por erickmx20
Si eso es lo que quería hacer, quería que se viera el proceso de copiado y que mostrara un mensaje al final, pero tu me podrias explicar cada renglon, pues he leido una guia publicada aqui en pdf y aunque entiendo mas o menos los conceptos me cuesta trabajo aplicarlos al proyecto.
¿Crees que me puedas explicar cada renglon?
Agradezco mucho que me hayas ayudado y si no quieres por ser muy tedioso o por falta de tiempo lo comprendere aun asi todos se merecen mis mas sinceros agradecimientos.
Publicado: 12 Nov 2014 03:49
por Luma
Codigo actualizado.
no es lo mas correcto . no soy experta apenas estoy aprendiendo y llevo 1 mes descubriendo ams.
Publicado: 12 Nov 2014 03:56
por erickmx20
Aun asi muchas gracias.
Publicado: 12 Nov 2014 03:58
por erickmx20