FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Error en Mover Archivos mediante la Api
Hola a todos, estoy haciendo una aplicacion que permita mover archivos mediante la Api de windows, utilicé este codigo que postio http://www.delphiaccess.com/forum/tr...os-y-carpetas/ todo funciona muy bien de esta forma: String To="E:\\"; String from="C:\\a.txt"; SHFILEOPSTRUCT FS; ZeroMemory(&FS, sizeof(SHFILEOPSTRUCT)); FS.hwnd = Handle; FS.wFunc = FO_MOVE; FS.pFrom = from.c_str(); FS.pTo = To.c_str();; FS.fFlags = FOF_ALLOWUNDO || FOF_NOCONFIRMATION; SHFileOperation(&FS); Pero cuando lo hago asi: String name_file="a.txt"; String To="E:\\"; String from="C:\\"+name_file; SHFILEOPSTRUCT FS; ZeroMemory(&FS, sizeof(SHFILEOPSTRUCT)); FS.hwnd = Handle; FS.wFunc = FO_MOVE; FS.pFrom = from.c_str(); FS.pTo = To.c_str();; FS.fFlags = FOF_ALLOWUNDO || FOF_NOCONFIRMATION; SHFileOperation(&FS); No funciona, me dice que "no se puede encontrar el archivo de origen", y la ruta hacia el fichero esta bien, comprobando mediante la funcion FileExists(from), el problema siempre me lo da cuando concateno las cadenas. Saludos
|
#2
|
||||
|
||||
¡¡¡Mandeee!!!
|
#3
|
||||
|
||||
Normalmente cuando se utilizan rutas hacia ficheros, debes utilizar el path completo.
Es decir, esa ruta:
Debes colocarla o usarla con el path completo del fichero.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#4
|
||||
|
||||
Hola rodno.
¡ Por favor, usá las etiquetas [delphi] [/delphi] para encerrar el código ! Mirá la diferencia de la legibilidad de tu mensaje con el uso de ellas: Hola a todos, estoy haciendo una aplicacion que permita mover archivos mediante la Api de windows, utilicé este codigo que postio http://www.delphiaccess.com/forum/tr...os-y-carpetas/ Pero cuando lo hago asi: No funciona, me dice que "no se puede encontrar el archivo de origen", y la ruta hacia el fichero esta bien, comprobando mediante la funcion FileExists(from), el problema siempre me lo da cuando concateno las cadenas. Saludos y muchas gracias por tu colaboración.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#5
|
|||
|
|||
Lo siento de verdad, es que lo postie, y trate de editarlo y cada ves que iba a cargar la pagina no cargaba completa o si no me decia que tenia que esperar mas de 25 minutos. Neftali lo quise decir es que cuando concateno el path del directorio donde se encuentra el fichero y el nombre del fichero es que da el problema
|
#6
|
||||
|
||||
Hola rodno.
Probá de este modo: Código:
... AnsiString name_file = "a.txt"; AnsiString Origen = "C:\\" + name_file; AnsiString Destino = "E:\\" + name_file; SHFILEOPSTRUCT FS; ZeroMemory(&FS, sizeof(SHFILEOPSTRUCT)); FS.hwnd = Handle; FS.wFunc = FO_MOVE; FS.pFrom = Origen.c_str(); FS.pTo = Destino.c_str();; FS.fFlags = FOF_ALLOWUNDO || FOF_NOCONFIRMATION; SHFileOperation(&FS); ...
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#7
|
|||
|
|||
nada, sigue con el mismo problema, no se realmente que sucede y cual es el misterio, es que mediante la funcion FileExists me devuelve que si existe el fichero que voy a copiar. saludos y gracias por su interes
|
#8
|
||||
|
||||
Hola rodno.
El código que te adjunté funciona correctamente. ¿ Estás seguro que el archivo existe y se llama exáctamente así ? ¿ Las unidades y carpetas de origen y destino son correctas ? Verificá todo eso con el explorador de Windows. Saludos.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#10
|
||||
|
||||
Según la documentación de Microsoft, la lista de archivos debe ir, cada archivo separado por un carácter nulo y un doble nulo al final.
Las cadenas en C terminan en un nulo (0) si tratas de sumar a un String un nulo no pasa nada pues para C es una cadena vacía de 0 caracteres. Para conseguir que tus cadenas terminen en doble nulo debes realizar un truco. Si te fijas bien en enlace que diste como referencia te darás cuenta que realiza "algo" con las cadenas antes de usarlas. Otro error que encuentro es que confundes el operador lógico || con el binario |. Tu código puede quedar así: Código:
String name_file="a.txt"; String To="F:\\;"; // Añado un caracter mas String From="C:\\"+name_file+";"; // Añado un caracter mas To[To.Length()] = 0; //Aseguro un nulo al final, el segundo nulo se pondrá con c_str() From[From.Length()] = 0; //Aseguro un nulo al final, el segundo nulo se pondrá con c_str() SHFILEOPSTRUCT FS; ZeroMemory(&FS, sizeof(SHFILEOPSTRUCT)); FS.hwnd = Handle; FS.wFunc = FO_MOVE; FS.pFrom = From.c_str(); FS.pTo = To.c_str(); FS.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION; SHFileOperation(&FS); Saludos. Última edición por escafandra fecha: 19-09-2011 a las 20:20:05. |
#11
|
|||
|
|||
muchas gracias ha funcionado perfecto, otra cosa, sabes que exceptiones puedo capturar para el trabajo con ficheros saludos y gracias
|
#12
|
||||
|
||||
Hola rodno.
Por favor cuando tengas otra pregunta no relacionada con el tema de un hilo, inicia uno nuevo. Punto 8 de la Guía de estilo Cita:
Saludos y gracias por tu colaboración.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#13
|
|||
|
|||
ok, disculpen
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Mover archivos y deletar carpeta | Paulao | Varios | 15 | 20-07-2011 15:57:54 |
mover varios archivos jpg a otra carpeta | ingmichel | Internet | 3 | 10-06-2011 16:44:59 |
Copiar/Mover archivos | lbidi | API de Windows | 1 | 05-10-2010 20:18:56 |
Descargar archivos mediante un formulario | pampitasnowman | PHP | 17 | 15-05-2007 16:39:04 |
preguntar por archivos mediante NMFTP | carlosegs | Internet | 1 | 25-04-2006 23:27:01 |
|