Asunto: Cambiar atributo oculto (H hide) a un fichero con Delphi
Estoy desarrollando una aplicación en Delphi de facturación y contabilidad y quiero poder cambiar el atributo de "Oculto" a un fichero determinado. He visto por la red cómo hacerlo y funciona, con la función del API de Windows "SetFileAttributes". Lo que utilizo es algo así:
Pero lo que no encuentro ni sé cómo hacer es para volver a mostrar el fichero, es decir, quitarle el atributo Oculto (H). Además, cuando ejecuto dos veces el código anterior, es decir, cuando intento ocultar un fichero ya oculto se le cambian otros atributos que no quiero.
¿cómo arreglo esto? ¿qué estoy haciendo mal?
Publicado:
Dom Oct 04, 2009 8:14 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Cambiar atributo oculto (H hide) a un fichero con Delphi
Anuncios
varios escribió:
Estoy desarrollando una aplicación en Delphi de facturación y contabilidad y quiero poder cambiar el atributo de "Oculto" a un fichero determinado. He visto por la red cómo hacerlo y funciona, con la función del API de Windows "SetFileAttributes". Lo que utilizo es algo así:
Pero lo que no encuentro ni sé cómo hacer es para volver a mostrar el fichero, es decir, quitarle el atributo Oculto (H). Además, cuando ejecuto dos veces el código anterior, es decir, cuando intento ocultar un fichero ya oculto se le cambian otros atributos que no quiero.
¿cómo arreglo esto? ¿qué estoy haciendo mal?
Veamos, efectivamente la función a utilizar es la correcta, pero no la forma en la que la utilizas.
Te mostramos cómo hacerlo de forma correcta a continuación. La clave está en que antes de establecer el atributo de oculto (o cualquier otro) debes comprobar si ya lo tiene activo, en cuyo caso no has de hacer nada, para ello utilizaremos la función "GetFileAttributes". Con esto arreglarás el problema que nos comentas de que cuando ejecutas el código y el fichero ya es oculto te cambia otros atributos.
En cuanto a activar o desactivar un atributo, cambiar de oculto a no oculto y viceversa, la solución es "sumar" el atributo de Oculto a los actuales del fichero para ocultarlo y "restar" el atributo de oculto para volver a mostrarlo.
Te ponemos el código fuente completo de lo que te acabamos de comentar:
Código:
function cambiarAtributoOculto (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_HIDDEN) > 0 then
resultado := false
else
resultado := SetFileAttributes (PChar(fichero),
atributos + FILE_ATTRIBUTE_HIDDEN);
end
else
begin
if (atributos and FILE_ATTRIBUTE_HIDDEN) > 0 then
resultado := SetFileAttributes (PChar(fichero),
atributos - FILE_ATTRIBUTE_HIDDEN)
else
resultado := false;
end;
result := resultado;
end;
Un ejemplo de uso de esta función que cambia el atributo de oculto de un fichero (activa o desactiva dicho atributo):
Con lo siguiente ocultaremos el fichero (si ya está oculto el código mostrará un mensaje indicando que el atributo no ha sido cambiado):
Código:
procedure TForm1.btCambiarAtributoOculto(Sender: TObject);
begin
if FileExists('C:\ajpdsoft.txt') then
begin
if cambiarAtributoOculto('C:\ajpdsoft.txt', True) 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;
Y con este otro mostraremos un fichero oculto (desactivaremos el atributo oculto), si ya está desactivado el atributo oculto el código mostrará un mensaje indicando que el atributo no ha sido cambiado:
Código:
procedure TForm1.btCambiarAtributoOculto(Sender: TObject);
begin
if FileExists('C:\ajpdsoft.txt') then
begin
if cambiarAtributoOculto('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;
Publicado:
Dom Oct 04, 2009 8:23 pm
alonsojpd Administrador/Moderador
Registrado: Sep 16, 2003 Mensajes: 2687
Asunto: Re: Cambiar atributo oculto (H hide) a un fichero con Delphi
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)::
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