Utilizamos cookies propias y de terceros. [Más información sobre las cookies].
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Wiki
Proyecto AjpdSoft: Foros

AjpdSoft :: Ver tema - Forma sencilla copia seguridad de carpeta - Delphi
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Forma sencilla copia seguridad de carpeta - Delphi

Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Forma sencilla copia seguridad de carpeta - Delphi Responder citando

He realizado una aplicación con Delphi, utiliza tablas Paradox, las cuales guardo en una carpeta llamada "Tablas" donde está el ejecutable de la aplicación. Quiero añadirle la opción de "Copia de seguridad" para que copie la carpeta "Tablas" a otra ubicación especificada, no necesito compresión ni nada por el estilo, un simple copiar y pegar ¿cómo puedo hacerlo?

Como mucho me gustaría que en la carpeta de destino se creara una subcarpeta con la fecha del día (aaaa-mm-dd) en el nombre, para no reemplazar copias anteriores.
MensajePublicado:
Mar Abr 01, 2008 11:07 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Forma sencilla copia seguridad de carpeta - Delphi Responder citando



Anuncios



varios escribió:
He realizado una aplicación con Delphi, utiliza tablas Paradox, las cuales guardo en una carpeta llamada "Tablas" donde está el ejecutable de la aplicación. Quiero añadirle la opción de "Copia de seguridad" para que copie la carpeta "Tablas" a otra ubicación especificada, no necesito compresión ni nada por el estilo, un simple copiar y pegar ¿cómo puedo hacerlo?

Como mucho me gustaría que en la carpeta de destino se creara una subcarpeta con la fecha del día (aaaa-mm-dd) en el nombre, para no reemplazar copias anteriores.


Por un lado, en el formulario de configuración de tu aplicación, colocas un TEdit (para indicar el destino de la copia de seguridad), y un par de TCheckBox (para indicar si se desea crear la subcarpeta con el día, mes y año y para indicar si se desean reemplazar los ficheros en caso de que existan en el destino).

Si no dispones de formulario de configuración, puedes añadir estos parámetros en el formulario de copia de seguridad o puedes prescindir de ellos y establecerlos de forma fija.

El procedimiento de copia de seguridad sería algo así:

Código:

procedure TFormMenu.Button1Click(Sender: TObject);
var
  carpetaDestino, carpetaOrigen : string;
  SearchRec : TSearchRec;
  numFicheros, numFicherosError : integer;
  reemplazarFicheros : boolean;
begin
  carpetaDestino := IncludeTrailingPathDelimiter (
      leCadINI ('Copia de seguridad', 'Destino', ''));
  if carpetaDestino = '' then
    MessageDlg('Debe indicar la carpeta de destino de la copia ' +
        'de seguridad. Para ello acceda a "Configuración" y ' +
        'especifíquela en la pestaña "Copia de seguridad".',
        mtInformation, [mbok], 0)
  else
  begin
    if leBoolINI('Copia de seguridad',
        'Crear subcarpeta día', true) then
      carpetaDestino := IncludeTrailingPathDelimiter (
          carpetaDestino + anoMesDia (Now));
    if MessageDlg ('Se va a realizar la copia de los datos de la ' +
        'aplicación en: ' + chr(13) + chr(13) +
        carpetaDestino + chr(13) + chr(13) +
        ' · Pulse "Aceptar" para continuar.' + chr(13) +
        ' · Pulse "Cancelar" para anular el proceso (desde ' +
        '"Configuración" podrá cambiar el destino ' +
        'de la copia de seguridad.',
        mtConfirmation, [mbok, mbcancel], 0) = mrok then
    begin
      ForceDirectories(carpetaDestino);
      carpetaOrigen := IncludeTrailingPathDelimiter (
         extractfilepath(Application.ExeName) + 'tablas');
      numFicheros := 0;
      numFicherosError := 0;
      reemplazarFicheros := not leBoolINI('Copia de seguridad',
          'Reemplazar', false);
      if FindFirst(carpetaOrigen + '*',
          faAnyFile, SearchRec) = 0 then
      begin
        repeat
          if (SearchRec.Name <> '.') and
              (SearchRec.Name <> '..') and
              (SearchRec.Attr <> fadirectory) then
          begin
            if CopyFile(pchar(carpetaOrigen + SearchRec.Name),
                pchar(carpetaDestino + SearchRec.Name),
                reemplazarFicheros) then
              Inc (numFicheros)
            else
              inc (numFicherosError);
          end;
        until FindNext(SearchRec) <> 0;
        FindClose(SearchRec);
      end;
      MessageDlg('La copia de seguridad ha finalizado correctamente.' +
          chr(13) + chr(13) + 'Número ficheros correctos: ' +
          inttostr(numFicheros) + chr(13) +
          'Número ficheros incorrectos: ' +
          inttostr(numFicherosError), mtInformation, [mbok], 0);
    end;
  end;
end;


Las funciones utilizadas:

Código:

//Lee una cadena de texto de un INI
function leCadINI (clave, cadena : string; defecto : string) : string;
begin
  with tinifile.create (changefileext(paramstr(0),'.INI')) do
  try
    result := readString (clave, cadena, defecto);
  finally
    free;
  end;
end;


//Lee un booleano de un INI
function leBoolINI (clave, cadena : string; defecto : boolean) : boolean;
begin
  with tinifile.create (changefileext(paramstr(0),'.INI')) do
  try
    result := readbool (clave, cadena, defecto);
  finally
    free;
  end;
end;


function anoMesDia (fecha : TDateTime) : string;
var
  ano, mes, dia, hora, minuto, segundo, milisegundo : Word;
  txMes, txDia : string;
begin
  DecodeDateTime(fecha, ano, mes, dia, hora, minuto, segundo, milisegundo);
  txMes := inttostr(mes);
  if Length (txMes) = 1 then
    txMes := '0' + txMes;
  txDia := inttostr(dia);
  if Length (txDia) = 1 then
    txDia := '0' + txDia;

  Result := inttostr(ano) + '-' + txMes + '-' + txDia;
end;



Para los valores de configuración (destino, reemplazar, crear subcarpeta con fecha) se asume que se han guardado de la siguiente forma:

Código:

  esCadINI('Copia de seguridad', 'Destino', txtDestino.Text);
  esBoolINI('Copia de seguridad', 'Crear subcarpeta día',
      opCrearSubcarpetaDia.Checked);
  esBoolINI('Copia de seguridad', 'Reemplazar',
      opReemplazar.Checked);


Utilizando las funciones:

Código:

//escribe una cadena de texto en un INI
procedure esCadINI (clave, cadena, valor : string);
begin
  with tinifile.create (changefileext(paramstr(0),'.INI')) do
  try
    writeString (clave, cadena, valor);
  finally
    free;
  end;
end;


//escribe un Booleano en un INI
procedure esBoolINI (clave, cadena : string; valor : boolean);
begin
  with tinifile.create (changefileext(paramstr(0),'.INI')) do
  try
    writeBool (clave, cadena, valor);
  finally
    free;
  end;
end;
MensajePublicado:
Mar Abr 01, 2008 11:33 pm
Top of PageVer perfil de usuario
Mostrar mensajes de anteriores:   
Todas las horas son GMT - 1 Horas
Publicar nuevo tema Responder al tema
Foros de discusión » Borland Delphi, Codegear Delphi .Net  

Cambiar a:  
Key
  Puede publicar nuevos temas en este foro
No puede responder a temas en este foro
No puede editar sus mensajes en este foro
No puede borrar sus mensajes en este foro
No puede votar en encuestas en este foro
Visita nuestro nuevo sitio web con programas y contenidos actualizados: Proyecto A