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 - Cambiar atributo oculto (H hide) a un fichero con Delphi
Foros de discusión Buscar Perfil FAQ Iniciar sesión
Information Cambiar atributo oculto (H hide) a un fichero con 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: Cambiar atributo oculto (H hide) a un fichero con Delphi Responder citando

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í:

Código:

  SetFileAttributes(PChar(fichero), FILE_ATTRIBUTE_HIDDEN);


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?
MensajePublicado:
Dom Oct 04, 2009 8:14 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Cambiar atributo oculto (H hide) a un fichero con Delphi Responder citando



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í:

Código:

  SetFileAttributes(PChar(fichero), FILE_ATTRIBUTE_HIDDEN);


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;
MensajePublicado:
Dom Oct 04, 2009 8:23 pm
Top of PageVer perfil de usuario
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Cambiar atributo oculto (H hide) a un fichero con Delphi 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
alonsojpd
Administrador/Moderador


Registrado: Sep 16, 2003
Mensajes: 2687

Asunto: Re: Cambiar atributo oculto (H hide) a un fichero con Delphi Responder citando



Anuncios



En el siguiente enlace tienes una aplicación gratuita con código fuente incluido que muestra y modifica los atributos de los archivos:

http://www.ajpdsoft.com/modules.php?name=News&file=article&sid=121
MensajePublicado:
Mar Oct 13, 2009 6:06 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