Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-08-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
CopyFile String Pchar

Hola!

Antes de que me hechen bronca debo decir que ya busque en varios hilos y no encuentro una respuesta para esto de como usar el CopyFile pues tengo problemas con los tipos string y pchar. Mi codigo:

Código Delphi [-]
function TMDatos.CrearBackUp(DBAccessName: String): boolean;
var
  BackUpDir, BackUpFile, respaldo : string;
begin
  result := false;
  BackUpDir := RutaAPP + '\Respaldos\';
  BackUpFile := 'BkUP_' + DBAccessName;
  Respaldo := (BackUpDir + BackUpFile);
  if not FileExists(DBAccessName) then Exit;
  try
    {Creamos una copia del archivo
    El primer Parametro es el archivo origen, el segundo es el archivo destino
    El tercer parametro si es FALSE sobreescribe el fichero si existe }
    CopyFile(pChar(DBAccessName), PChar(Respaldo), False);
    Result := true;
  except
    Exit;
  end;
end;

la variable RutaApp es:
Código Delphi [-]
 
//Establecemos la ruta de la aplicacion
  RutaAPP := ExtractFilePath(ParamStr(0));

La intencion es crear un respaldo de una BD Access en otra carpeta diferente de donde esta la aplicacion (Respaldos). El problema con este codigo es que cuando verifico el result en otra parte de la aplicacion me dice que el respaldo fue hecho con exito sin embargo no se crea absolutamente nada.
Si creo el respaldo en la misma carpeta de la aplicacion todo funciona OK

Código Delphi [-]
CopyFile(pChar(DBAccessName), PChar(BackUpFile), False);

Gracias!
Responder Con Cita
  #2  
Antiguo 14-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por Ayuda ExtractFillePath
The resulting string is the leftmost characters of FileName, up to and including the colon or backslash that separates the path information from the name and extension.
Así que:
Código Delphi [-]
 Respaldo := (BackUpDir + BackUpFile);
te queda como "C:\micarpeta\\Respaldos\ .... lo demás ya no importa . tienes dos barras invertidas seguidas.

El por qué no te enteras de nada, es precisamente porque en el Except simplemente sales de la rutina y ocultas la excepción que windows debería darte "File or directory not exist" u otro parecido.

Metiéndome donde no me llaman, yo añadiría la fecha y hora en el nombre del Backup, así nunca tendrás 2 nombres de archivos iguales, de camino ya tienes copias incrementales.


Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #3  
Antiguo 14-08-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Gracias Lepe, sin embargo el problema persiste, no me crea la carpeta respaldos ni el archivo de respaldo (por logica jeje), coloque una rutina despues del except para capturar el error pero sigue igual no marca ningun error.

Código Delphi [-]
try
    {Creamos una copia del archivo
    El primer Parametro es el archivo origen, el segundo es el archivo destino
    El tercer parametro si es FALSE sobreescribe el fichero si existe }
    CopyFile(pChar(DBAccessName), PChar(Respaldo), False);
    Result := true;
  except
    on E:Exception do
        begin
          LogError(E);
          ShowMessage(E.Message);
        end;
  end;
Responder Con Cita
  #4  
Antiguo 14-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Con el permiso de Lepe, voy a discrepar. La doble \ no es el mayor problema que hay aquí, ya que si windows encuentra \\ por el medio de una ruta suele tomarla como una sola, aunque tampoco quiero decir que eso este bien hecho.

El problema es el siguiente, si a la función le pasas como parametro, por ejemplo, "archivo.txt" la función Copyfile nos quedaría así:

Código Delphi [-]
  Copyfile('archivo.txt','c:\ruta\\Respaldos\archivo.txt',FALSE);

Por lo tanto si el archivo que queremos copiar se encuentra en el mismo directorio que nuestra aplicación no habría problemas (aparte de la \\), pero si el archivo no se en cuenta en el mismo directorio la función fallara.

Un ultimo apunte: dentro del bloque try ... except no hay ninguna función que pueda generar una excepción (la función CopyFile no genera excepciones) así que no entiendo para que lo usas.
Responder Con Cita
  #5  
Antiguo 14-08-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Aqui nuevamente, la doble \ ya esta corregido, lo de la excepcion ok se borro, sin embargo esto sigue sin generar la carpeta respaldo y el archivo de respaldo asi que la pregunta sigue en el aire ¿por que? ¿que esta mal?
por cierto Lepe lo de la hora y fecha esta considerado pero vamos por partes

Saludos!
Responder Con Cita
  #6  
Antiguo 14-08-2006
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
¿La carpeta respaldo existe? La funcion Copyfile no crea carpetas, si no existe la carpeta la funcion fallara.
Responder Con Cita
  #7  
Antiguo 14-08-2006
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 20
FGarcia Va por buen camino
Ciertamente un error de interpretacion de la funcion, ya se creo la carpeta y el correspondiente respaldo. ¡Gracias nuevamente!
Responder Con Cita
  #8  
Antiguo 14-08-2006
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Si vas a tener en cuenta lo de la fecha y hora... te aviso: Windows no permite la barra como nombre de un archivo 22/01/2006 así que antes usa :

formatdatetime('dd-mm-yyyy hh nn ss', now);

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
pasar contenido de pchar a string coletaun Varios 14 25-07-2006 17:46:09
Compatibilidad entre PChar y String vick Conexión con bases de datos 5 24-10-2005 21:50:35
¿como pasar de String dentro de un PChar? Moises22 Varios 6 27-09-2005 15:43:47
Pchar y String superhopi Varios 8 19-08-2004 09:54:06
problemas de compatibilidad de tipos pchar y string VRO Varios 2 13-05-2004 10:29:34


La franja horaria es GMT +2. Ahora son las 01:20:14.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi