Ir al contenido


Foto

[RESUELTO] Atributos de archivos


  • Por favor identifícate para responder
18 respuestas en este tema

#1 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 24 julio 2010 - 02:59

Quisiera saber como modificar los permisos de un archivo desde Delphi. Yo tengo un listado de archivos en un notepad. Quiero que Delphi haga que cada archivo no tenga atributos que me impidan su eliminacion. Como lo puedo realizar? Como dije el problema lo tengo con los permisos.  :huh:


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 julio 2010 - 04:14

Hola TheJoker,

Bienvenido a DelphiAccess, espero que este lugar te sea de mucho agrado  :)

Puedes cambiar los atributos de un archivo mediante FileSetAttr. Para ello debes agregar en uses la unidad SysUtils.
De forma similar, para obtener los atributos de un archivo está la función FileGetAttr.

En la ayuda de Delphi hay ejemplos de uso de las funciones FileXxxAttr.

Si tienes más dudas no dudes en consultar.

Saludos,
  • 0

#3 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 24 julio 2010 - 04:20

Gracias Delphius, muy buen foro.

Tengo esta linea:



delphi
  1. FileSetAttr( 'Lineas.Strings[i]', faReadOnly or faHidden );



Lo que no se es como realizar lo contrario, sacarle lo solo lectura y hacer que sea visible?

Adios.
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 24 julio 2010 - 05:16

Hola TheJoker,
Entiendo tu duda.

Notarás que la variable que hace de atributo es un integer. Esta variable es por decirlo de un modo, la combinación (suma) de ciertas constantes.
De la ayuda de Delphi se aprecia esto:

faReadOnly $00000001 Read-only files
faHidden $00000002 Hidden files
faSysFile $00000004 System files
faVolumeID $00000008 Volume ID files
faDirectory $00000010 Directory files
faArchive $00000020 Archive files
faAnyFile $0000003F Any file


De modo que para lograr más de un atributo, deben sumarse esos valores. De forma inversa para quitarles ciertos atributos hay que restarles.  ;)

En el ejemplo que pones, se le está dando dos atributos: de sólo lectura y escondido. El OR hace de más (+).

Si deseas quitarle estos atributos sin "pisar" o cambiar los restantes puedes hacer algo como esto:

1. Leer los atributos originales con FileGetAttr y guardarlos en una variable.
2. Restarle a dicha variable faReadOnly y faHidden
3. Establecer los atributos con esta variable y FileSetAttr

Espero que se me entienda.
  • 0

#5 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 25 julio 2010 - 09:30

Me aclaraste un poco como seria, gracias.

Cualquier cosa vuelvo.  :)
  • 0

#6 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 25 julio 2010 - 02:56

Otra duda me surgio, es del mismo proyecto pero no es sobre los artributos.

En el caso de que quiero buscar un archivo, puedo usar esto:



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   if FileExists(archivos.txt) then
  4.     ShowMessage('File already exists!')
  5.   else
  6.     ShowMessage('This file is unique');
  7. end;



Aclaracion: archivos.txt es un texto donde almaceno varias lineas con las direcciones de archivos, que luego eliminare.

Pero en ves de que me muestre un ShowMessage con cualquiera de los dos casos (lo encuentre o no) quiero que me muestre solo si lo encuentra pero en un Memo, asi puedo ver los archivos que encontro y para lo que quiero la herramienta es mas facil para el usuario. Al ser muchos archivos a buscar es fastidioso el ShowMessage.

Me pueden ayudar con esto?
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 25 julio 2010 - 03:39

A ver si te entendí



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   if FileExists(archivos.txt) then
  4.     memo1.lines.add('File already exists!');
  5. end;



Salud OS
  • 0

#8 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 25 julio 2010 - 04:23

A ver si te entendí



delphi
  1. procedure TForm1.Button1Click(Sender: TObject);
  2. begin
  3.   if FileExists(archivos.txt) then
  4.     memo1.lines.add('File already exists!');
  5. end;



Salud OS


Perfecto me anda bien en esa parte, pero al agregarle para que elimine me salta un error?



delphi
  1. if FileExists(archivos) then
  2.   DeleteFile(archivos);
  3.     memo1.lines.add(archivos + ' eliminado!');



Te dejo una imagen asi se ve mejor.
Imagen Enviada
  • 0

#9 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 25 julio 2010 - 09:22

Hola

No tengo idea de porque ese error, solo te diré algo,  según tu código lo que haces es:


CASO 1. Si existe el archivo:

1. Preguntas si existe el archivo
2. Si existe lo borras
3. Muestras en el memo el archivo que borraste


CASO 2: NO existe el archivo:

1. Preguntas si existe el archivo
2. Si NO existe, muestras en el memo el archivo que NO existe

Yo haría lo siguiente para mostrar solo cuando el archivo SI existe.



delphi
  1. if FileExists(archivos) then
  2. begin
  3.   DeleteFile(archivos);
  4.   memo1.lines.add(archivos + ' eliminado!');
  5. end;



O si quieres mostrar un mensaje de que no existe el archivo, puedes hacer esto.



delphi
  1. if FileExists(archivos) then
  2. begin
  3.   DeleteFile(archivos);
  4.   memo1.lines.add(archivos + ' eliminado!');
  5. end
  6. else begin
  7.       memo1.lines.add('No existe el archivo');
  8. end;



Salud OS
  • 0

#10 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 26 julio 2010 - 07:50

Me anda barbaro este codigo:


delphi
  1. if FileExists(archivos) then
  2. begin
  3.   DeleteFile(archivos);
  4.   memo1.lines.add(archivos + ' eliminado!');
  5. end;



Muchas gracias de nuevo.  (y)
  • 0

#11 cadetill

cadetill

    Advanced Member

  • Moderadores
  • PipPipPip
  • 994 mensajes
  • LocationEspaña

Escrito 26 julio 2010 - 09:27

Buenas,

A veces puede que no se llegue a borrar el archivo porque está siendo usado por otro proceso. Si realmente lo que quieres mostrar es que un archivo se ha borrado, creo que deberías de hacer algo así



delphi
  1. if DeleteFile(archivos) then memo1.lines.add(archivos + ' eliminado!');



Con esto, realmente te da lo mismo si el archivo existe o no, con lo que puedes ahorrarte esa comparación. En el caso de que no exista, DeleteFile devolverá 0 (o false) y, si existe y se ha podido borrar, devolverá un valor diferente de 0 o True.

Si además quieres saber el motivo por el cual no ha podido borrarse (que no exista, que esté siendo usado por otro proceso,...), siempre puedes usar la función GetLastError.

Espero que te sirva

Nos leemos


  • 0

#12 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 26 julio 2010 - 09:56

Una duda como hago para sacar del memo la primera linea que dice memo1?

Para eliminar las demas lineas despues uso.
Memo1.Lines.Clear;

cadetill gracias por tu sugerencia ya la implemente, tenes razon asi ahorro recursos, y el trabajo es el mismo.

Salu2.
  • 0

#13 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 26 julio 2010 - 10:01

Saludos.

Para limpiar la primera línea que dice "memo1", simplemente debes de entrar la opción Lines en el Object Inspector (en tiempo de Diseño) y quitar el texto.
  • 0

#14 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.419 mensajes
  • LocationRepública Dominicana

Escrito 26 julio 2010 - 10:01

Vas a la propiedad Lines del componentes y eliminias esa línea, así te evitas de borrarlo en tiempo de ejecución.

Saludos.

PD. 10 segundos Rolphy, 10 segundos :p
  • 0

#15 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 26 julio 2010 - 10:24

Jajajaja, muchas gracias.

Salu2.
  • 0

#16 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 27 julio 2010 - 01:20

En un bloc de notas como puedo escribir un listado usando Lineas.Strings[i] ?

Tengo problemas para que haga los saltos con cada escritura y lea todas las lineas.

Salu2.
  • 0

#17 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 27 julio 2010 - 06:18

En un bloc de notas como puedo escribir un listado usando Lineas.Strings[i] ?

Tengo problemas para que haga los saltos con cada escritura y lea todas las lineas.

Salu2.


Saludos.

Si vas a escribir un nuevo "problema" distinto al existente lo recomendable es que abras un nuevo hilo, así es más fácil darle seguimiento tanto tú como los demás.

P.D. El hilo ya personalmente lo había marcado como resuelto a razón de que tu último post esta marcado como resuelto. ¿Porque cambiar el estado?
  • 0

#18 TheJoker

TheJoker

    Member

  • Miembros
  • PipPip
  • 19 mensajes

Escrito 27 julio 2010 - 06:41

Tienes razon perdona las molestias.

Moves el post en un nuevo tema o creo uno yo?

Salu2.
  • 0

#19 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 27 julio 2010 - 06:43

Tienes razon perdona las molestias.

Moves el post en un nuevo tema o creo uno yo?

Salu2.


Saludos.

Creo que lo recomendable es que seas tú mismo quien cree el hilo nuevo, eres él único que conoce el problema y por ende puedes darnos todos los detalles para nosotros tratar de ayudarte. (y)
  • 0




IP.Board spam blocked by CleanTalk.