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 - Mejorar AjpdSoft Copia de Seguridad, bit de modificado
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Mejorar AjpdSoft Copia de Seguridad, bit de modificado

Publicar nuevo tema Responder al tema
Foros de discusión » Programas Proyecto AjpdSoft   
Ver tema anterior :: Ver tema siguiente
AutorMensaje
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Mejorar AjpdSoft Copia de Seguridad, bit de modificado Responder citando

He descargado el código fuente de la aplicación AjpdSoft Copia de Seguridad:

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=291

para intentar añadir una opción interesante: copia incremental utilizando bit de modificado.

Para la copia incremental, en vez de usar la fecha de modificación que a veces no va bien (por diferencia de hora del equipo que guarda el fichero copiado con el equipo que lo tiene y demás historias de Windows, he leído por ahí que Windows incorpora un atributo en los ficheros para este tipo de copias incrementales.

Pero no tengo ni idea de cómo implentar esto en Delphi ¿existe tal opción para los ficheros de Windows? ¿cómo podría implementarlo en AjpdSoft Copia de Seguridad? ¿cómo consultar el estado de ese atributo?
MensajePublicado:
Dom Oct 04, 2009 8:29 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Mejorar AjpdSoft Copia de Seguridad, bit de modificado Responder citando



Anuncios



varios escribió:
He descargado el código fuente de la aplicación AjpdSoft Copia de Seguridad:

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=291

para intentar añadir una opción interesante: copia incremental utilizando bit de modificado.

Para la copia incremental, en vez de usar la fecha de modificación que a veces no va bien (por diferencia de hora del equipo que guarda el fichero copiado con el equipo que lo tiene y demás historias de Windows, he leído por ahí que Windows incorpora un atributo en los ficheros para este tipo de copias incrementales.

Pero no tengo ni idea de cómo implentar esto en Delphi ¿existe tal opción para los ficheros de Windows? ¿cómo podría implementarlo en AjpdSoft Copia de Seguridad? ¿cómo consultar el estado de ese atributo?


Efectivamente se trata de un atributo que Windows incorpora a los ficheros, válido para particiones NTFS (no es válido para FAT32). Dicho atributo, llamado "FILE_ATTRIBUTE_ARCHIVE", está siendo probado por nuestros desarrolladores como opción para agregarlo a la aplicación AjpdSoft Copia de Seguridad.

En Windows XP o Windows 2003, si pulsas con el botón derecho del ratón sobre un fichero, seleccionas "Propiedades", en la pestaña "General" verás un botón "Opciones avanzadas...", si pulsas en él te aparecerá una ventana como la siguiente:



En "Atributos de índice y archivo histórico" verás un check que dice "Archivo listo para archivar históricamente", si pulsas en la ayuda te mostrará algo así:

Especifica si el archivo o carpeta se debe almacenar. Algunos programas utilizan esta opción para determinar de qué archivos y carpetas se harán copias de seguridad. Si selecciona varios archivos o carpetas, una marca de verificación indicará que todos los archivos o carpetas tienen activado el atributo de almacenamiento. Una casilla de verificación rellena indica que algunos archivos o carpetas tienen establecido el atributo de almacenamiento y otros no.

Como ves sí existe tal atributo y es perfectamente implementable en Delphi, se trata como un atributo más de un fichero (como el de oculto, no indexar, sistema, sólo lectura, etc.).

El comportamiento de este atributo es el siguiente: si lo desmarcas de la ventana que te hemos comentado, permanecerá desmarcado hasta que se realice un cambio en el fichero, en cuyo caso el sistema operativo lo marcará.

De esta forma, Windows marcará los archivos que se modifiquen y tú, desde tu aplicación, comprobarás si ese atributo está activo, si lo está copiarás el fichero (pues ha sido modificado desde la última copia de seguridad) y deberás cambiar el atributo y desactivarlo (desmarcarlo) para que en la próxima copia de seguridad no se copie, a no ser que se haya modificado.

Sin duda se trata de un método bastante más eficiente que comprobar la fecha de modificación de dos ficheros (el origen y el destino). La única "pega" es que no te servirá en sistemas de ficheros FAT32 y necesitarás permisos sobre los ficheros (para poder cambiarle el atributo de "Archivo listo para archivar históricamente" tras copiarlo.


Ultima edición por alonsojpd el Dom Oct 04, 2009 9:18 pm, editado 1 vez
MensajePublicado:
Dom Oct 04, 2009 8:38 pm
Top of PageVer perfil de usuario
varios
Magnífico usuario


Registrado: Oct 10, 2006
Mensajes: 2092

Asunto: Re: Mejorar AjpdSoft Copia de Seguridad, bit de modificado Responder citando



Anuncios



alonsojpd escribió:

Efectivamente se trata de un atributo que Windows incorpora a los ficheros, válido para particiones NTFS (no es válido para FAT32). Dicho atributo, llamado "FILE_ATTRIBUTE_ARCHIVE", está siendo probado por nuestros desarrolladores como opción para agregarlo a la aplicación AjpdSoft Copia de Seguridad.

En Windows XP o Windows 2003, si pulsas con el botón derecho del ratón sobre un fichero, seleccionas "Propiedades", en la pestaña "General" verás un botón "Opciones avanzadas...", si pulsas en él te aparecerá una ventana como la siguiente:

En "Atributos de índice y archivo histórico" verás un check que dice "Archivo listo para archivar históricamente", si pulsas en la ayuda te mostrará algo así:

Especifica si el archivo o carpeta se debe almacenar. Algunos programas utilizan esta opción para determinar de qué archivos y carpetas se harán copias de seguridad. Si selecciona varios archivos o carpetas, una marca de verificación indicará que todos los archivos o carpetas tienen activado el atributo de almacenamiento. Una casilla de verificación rellena indica que algunos archivos o carpetas tienen establecido el atributo de almacenamiento y otros no.

Como ves sí existe tal atributo y es perfectamente implementable en Delphi, se trata como un atributo más de un fichero (como el de oculto, no indexar, sistema, sólo lectura, etc.).

El comportamiento de este atributo es el siguiente: si lo desmarcas de la ventana que te hemos comentado, permanecerá desmarcado hasta que se realice un cambio en el fichero, en cuyo caso el sistema operativo lo marcará.

De esta forma, Windows marcará los archivos que se modifiquen y tú, desde tu aplicación, comprobarás si ese atributo está activo, si lo está copiarás el fichero (pues ha sido modificado desde la última copia de seguridad) y deberás cambiar el atributo y desactivarlo (desmarcarlo) para que en la próxima copia de seguridad no se copie, a no ser que se haya modificado.

Sin duda se trata de un método bastante más eficiente que comprobar la fecha de modificación de dos ficheros (el origen y el destino). La única "pega" es que no te servirá en sistemas de ficheros FAT32 y necesitarás permisos sobre los ficheros (para poder cambiarle el atributo de "Archivo listo para archivar históricamente" tras copiarlo.


Ok, lo entiendo, es interesante, pero ¿cómo modifico ese atributo en los ficheros desde Delphi? ¿cómo obteno su valor actual?
MensajePublicado:
Dom Oct 04, 2009 8:39 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Mejorar AjpdSoft Copia de Seguridad, bit de modificado Responder citando



Anuncios



varios escribió:
Ok, lo entiendo, es interesante, pero ¿cómo modifico ese atributo en los ficheros desde Delphi? ¿cómo obteno su valor actual?


Para modificar el valor del atributo "Archivo listo para archicar históricamente" desde una aplicación Delphi puedes utilizar la siguiente función para Delphi, que te permitirá activar o desactivar este atributo de "bit de modificado":

Código:

function cambiarAtributoArchivo (fichero : string;
    activar : boolean) : boolean;
var
  resultado : boolean;
  atributos: Cardinal;
begin
  resultado := false;

  atributos := GetFileAttributes(PChar(fichero));

  if activar then
  begin
    if (atributos and FILE_ATTRIBUTE_ARCHIVE) > 0 then
      resultado := false
    else
      resultado := SetFileAttributes (PChar(fichero),
          atributos + FILE_ATTRIBUTE_ARCHIVE);
  end
  else
  begin
    if (atributos and FILE_ATTRIBUTE_ARCHIVE) > 0 then
      resultado := SetFileAttributes (PChar(fichero),
          atributos - FILE_ATTRIBUTE_ARCHIVE)
    else
      resultado := false;
  end;
  result := resultado;
end;


Y un ejemplo de lo que tendrías que ejecutar tras copiar el fichero (para desactivar este atributo):

Código:

procedure TForm1.Button1Click(Sender: TObject);
begin
  if FileExists('C:\ajpdsoft.txt') then
  begin
    if cambiarAtributoArchivo('C:\ajpdsoft.txt', false) then
      MessageDlg('El atributo de Oculto ha sido cambiado correctamente.',
          mtInformation, [mbok], 0)
    else
      MessageDlg('El atributo de Oculto no ha podido ser cambiado.',
          mtWarning, [mbok], 0);
  end;
end;


De esta forma será el sistema operativo el que cambie el valor de dicho atributo activándolo si el fichero se modifica.

Para obtener el valor actual de este atributo con Delphi puedes utilizar esta función:

Código:

function obtenerAtributoArchivo (fichero : string) : boolean;
var
  atributos: Cardinal;
begin
  atributos := GetFileAttributes(PChar(fichero));
  Result := (atributos and FILE_ATTRIBUTE_ARCHIVE) > 0;
end;


Un ejemplo de uso:

Código:

procedure TForm1.Button2Click(Sender: TObject);
begin
  if obtenerAtributoArchivo('C:\ajpdsoft.txt') then
    ShowMessage('El atributo "Archivo listo para archivar ' +
        'históricamente" está activo. El fichero se ha ' +
        'modificado desde la última copia de seguridad.')
  else
    ShowMessage('El atributo "Archivo listo para archivar ' +
        'históricamente" no está activo. El fichero no se ' +
        'ha modificado desde la última copia de seguridad.');
end;
MensajePublicado:
Dom Oct 04, 2009 9:00 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Mejorar AjpdSoft Copia de Seguridad, bit de modificado Responder citando



Anuncios



En el siguiente enlace tienes una función que te permitirá cambiar cualquier atributo con Delphi en un fichero (Sólo lectura, Oculto, Listo para archivar, No indexar, Sistema, Fuera de línea, Temporal, Normal)::

http://www.ajpdsoft.com/modules.php?name=Content&pa=showpage&pid=231
MensajePublicado:
Dom Oct 04, 2009 9:13 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 » Programas Proyecto AjpdSoft  

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