Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-09-2005
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Como convertir un archivo a solo lectura

Buenas tardes, necesito convertir un archivo a solo lectura despues de una modificacion. con ofstream, no me funciona. Hay alguna manera de hacerlo para que el archivo quede inmodificable desde Builder?

Gracias.
Responder Con Cita
  #2  
Antiguo 14-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Una forma podría ser utilizar la función "FileSetReadOnly". Otra puede ser utilizar la función "SetFileAttributes".

Código Delphi [-]
  FileSetReadOnly('C:\archivo.txt', true);
Código Delphi [-]
  var
    atributos: Cardinal;
  begin
    atributos := GetFileAttributes(PChar('C:\archivo.txt'));
    SetFileAttributes(PChar('C:\archivo.txt'), atributos + faReadOnly);
  end;
__________________
David Esperalta
www.decsoftutils.com

Última edición por dec fecha: 14-09-2005 a las 20:40:41. Razón: Corrección del texto.
Responder Con Cita
  #3  
Antiguo 14-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Otra vez... que no me fijé en que se hablaba de C++ Builder... ¡Esta vez yo mismo traduzco el código propuesto por mí mismo!

Código:
 // C++ Builder
 FileSetReadOnly("C:\\archivo.txt", true);
Código:
 // C++ Builder
 Cardinal atributos = GetFileAttributesA("C:\\archivo.txt");
 SetFileAttributesA("C:\\archivo.txt", atributos + faReadOnly);
No crean... ha costado lo suyo
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #4  
Antiguo 14-09-2005
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
No me funcionó

Hola amigo, te cuento que copié las lineas que me dijiste y no me funcionó.
Gracias por tu ayuda.
Responder Con Cita
  #5  
Antiguo 14-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por JuanErasmo
Hola amigo, te cuento que copié las lineas que me dijiste y no me funcionó.
Hombre, ya lo siento, pero, ¿qué es lo que no te funcionó? ¿se produjo algún error? En caso afirmativo, ¿qué error se produjo?
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #6  
Antiguo 14-09-2005
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Hola dec

Dec el archivo me desapareció de C:\\archivo.txt.
Quedó como oculto. yo necesito que se vea pero que cuando se le dé guardar despues de modificarlo, saque un error.
Responder Con Cita
  #7  
Antiguo 14-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por JuanErasmo
Dec el archivo me desapareció de C:\\archivo.txt.
A ver, ese archivo era un ejemplo, evidentemente, debes sustituir ese archivo por el que precises. Respecto de lo de que te "desapareció" el archivo... probando la primera de las funciones que te comenté sobre un archivo este no desaparece, sino que se le cambia el atributo de "solo lectura", tal como se espera. Y con la segunda "forma de hacerlo" pasa igual: no desaparece el archivo y sí pasa a tener el atributo de "solo lectura". Vamos, que lo he probado y no va mal

Cita:
Empezado por JuanErasmo
(...) yo necesito que se vea pero que cuando se le dé guardar despues de modificarlo, saque un error.
Ya digo que una cosa es ocultar un archivo y otra cambiarle el atributo de "solo lectura": en realidad si quieres ocultar el archivo se trata de cambiar otro atributo del mismo. Si para hacerlo de "solo lectura" hay que utilizar la constante "faReadOnly", para "ocultarlo" hay que utilizar la constante "faHidden".

Ahora bien, ¿qué se trata de conseguir? En un editor que traigo entre manos, por ejemplo, si tratas de abrir un archivo cuyo atributo de "solo lectura" esté activado, el programa te preguntará si quieres quitar dicho atributo del archivo: si lo quitas, te dejará editar el archivo, y, si no lo haces, no te dejará editarlo: respetando así el atributo de "solo lectura" del archivo en cuestión. Ahora, ¿es a algo así a lo que te refieres?

Quiere decirse que tú puedes comprobar (ver más abajo) desde tu programa si un archivo tiene el atributo de "solo lectura" y actuar luego en consecuencia como tuvieras pensado. Otra cosa sería que el propio Windows respetase los atributos de los archivos, pero, si no me equivoco, esto no es muy así.

Código:
  // C++ Builder
 Cardinal atributos = GetFileAttributesA("C:\\archivo.txt");
 if (atributos && faReadOnly == faReadOnly)
 {
   // El archivo tiene el atributo de "solo lectura"
 }
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #8  
Antiguo 14-09-2005
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Dec

Dec, lo que yo te digo es que el archivo al cual le cambio a ReadOnly desaparece del Explorador, la prueba es que no lo veo, y al intentar crear un archivo con el mismo nombre, me dice que el archivo ya existe. y entonces a tí no te pasa eso?
Gracias.
Yo quiero poder leer el archivo despues no que ni siquiera me deje ver su acceso.
Responder Con Cita
  #9  
Antiguo 14-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por JuanErasmo
Dec, lo que yo te digo es que el archivo al cual le cambio a ReadOnly desaparece del Explorador, la prueba es que no lo veo, y al intentar crear un archivo con el mismo nombre, me dice que el archivo ya existe. y entonces a tí no te pasa eso?
No; te lo juro.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
  #10  
Antiguo 14-09-2005
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Gracias por tu ayuda, dec.

Gracias dec, de la primera forma no me desparece

FileSetReadOnly("C:\\arch.txt", true);


pero de la segunda sí.

Cardinal atributos = GetFileAttributesA("C:\\arch.txt"); //para ocultar el archivo
SetFileAttributesA("C:\\arch.txt", atributos + faReadOnly);

Sin embargo en Windows puede volver a cambiarle uno esa propiedad.
No hay manera de sellar el archivo completamente?
Gracias.
Responder Con Cita
  #11  
Antiguo 14-09-2005
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
Hola,

Cita:
Empezado por JuanErasmo
Gracias dec, de la primera forma no me desparece (...) pero de la segunda sí.
Pues no lo entiendo, ciertamente.

Cita:
Empezado por JuanErasmo
Sin embargo en Windows puede volver a cambiarle uno esa propiedad.
No hay manera de sellar el archivo completamente?
Hasta donde yo llego y así a bote pronto diría que no.
__________________
David Esperalta
www.decsoftutils.com
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 17:44:44.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi