 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
laremi400 Master

Registrado: 12 May 2004Mensajes: 179
|
Publicado: Lun 31 May, 2004 4:15 pm Asunto: Copiar Ficheros |
|
|
Hola!!
Estoy usando esta función que la copié de lo que algún compañero dejo en una respuesta (Víktor, creo, y sino que me disculpe el interesado, que no me acuerdo):
void __fastcall CopiarCarpeta(AnsiString Origen, AnsiString Destino)
{
SHFILEOPSTRUCT sfos;
ZeroMemory(&sfos, sizeof(sfos));
sfos.hwnd = NULL;
sfos.wFunc = FO_COPY;
ShowMessage(Origen);
sfos.pFrom = Origen.c_str();
sfos.pTo = Destino.c_str();
sfos.fFlags = FOF_NOCONFIRMMKDIR | FOF_NOCONFIRMATION;
SHFileOperation(&sfos);
}
Cuando se llama a esta funcion asi:
CopiarCarpeta("C:\\fichero1.txt","E: \\fichero1.txt");
La función hace la copia. Pero si se le llama intentando copiar desde un directorio, da un error:
CopiarCarpeta("C:\\Programas\\fichero1.txt","E:\\fichero1.txt");
Dice "que no puede copiar el archivo: No se puede leer el disco o archivo de origen".
Sin embargo si le llama así:
CopiarCarpeta("C:\\Programas\\*.txt","E:\\");
Entonces funciona perfectamente. ¿Alguien sabe que puede estar pasando?. Quiero usar esta función por que aparece la ventana de copia de ficheros y eso me resulta muy útil.
Gracias!! |
|
| Volver arriba |
|
 |
_Leo Site Admin

Registrado: 11 Ago 2002Mensajes: 1875Ubicación: Lanzarote - Islas Canarias (España)
|
Publicado: Lun 31 May, 2004 4:50 pm Asunto: |
|
|
Según la referencia del API, como en el origen se pueden especificar más de un archivo, estos deben estar separados por un carácter nulo ('\0') y la lista debe estar acabada en doble carácter nulo. Uno ya se añade automáticamente al terminar la cadena, falta por añadir uno más.
Modifica la función del siguiente modo:
| Código: | void __fastcall CopiarCarpeta(AnsiString Origen, AnsiString Destino)
{
SHFILEOPSTRUCT sfos = {0,};
ZeroMemory(&sfos, sizeof(sfos));
sfos.hwnd = NULL;
sfos.wFunc = FO_COPY;
// Añadimos estas dos líneas
Origen.SetLength(Origen.Length()+1);
Origen[Origen.Length()] = '\0';
sfos.pFrom = Origen.c_str();
sfos.pTo = Destino.c_str();
sfos.fFlags = FOF_NOCONFIRMMKDIR | FOF_NOCONFIRMATION;
SHFileOperation(&sfos);
} |
Otro ejemplo:
https://cppbuilder.es/viewtopic.php?t=617 |
|
| Volver arriba |
|
 |
laremi400 Master

Registrado: 12 May 2004Mensajes: 179
|
Publicado: Mie 02 Jun, 2004 12:05 pm Asunto: |
|
|
Un millón de gracias Leo!!!!.
Lo que yo había intentado era:
Origen += "\0";
Y también:
Origen = Origen + "\0";
Y cosas de este estilo (antes de llamar a la función por ejemplo). Como no me funcionaba tampoco, lo dejé, suponiendo que no era eso.
Ahora ya funciona.
Olé, maestro! |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|