Los rincones del API Win32: Archivos proyectados en memoria - Objeto File (archivo)
Tutorial creado por Juan Manuel. Extraido de: http://www.lawebdejm.com
27 de Agosto de 2005
Programación estructurada
9 - Objeto File (archivo)
Se tratan de un objeto del núcleo que se representa por un descriptor. Este descriptor se obtiene a través de la función del API CreateFile, que aunque no lo parezca, se usa tanto para abrir un archivo existente como para crearlo.
Para los programadores de C++Builder, otra opción puede ser utilizar un objeto de cualquier descendiente de la clase THandleStream que nos proporciona la VCL, aunque no vamos a entrar en este caso, ya que nuestro objetivo es centrarnos en el API Win32.
La función CreateFile en realidad se utiliza para abrir cualquier dispositivo de E/S: desde un fichero de disco o una partición física, hasta un puerto de comunicaciones, aunque nosotros nos vamos a centrar en los ficheros de disco, que es el caso que nos ocupa.
El prototipo de la función es el siguiente:
HANDLE CreateFile( LPCTSTR lpArchivo, DWORD dwModoAcceso, DWORD dwCompartir, LPSECURITY_ATTRIBUTES lpSecuridad, DWORD dwCreation, DWORD dwAtributos, HANDLE hFicheroPlantilla );
Como podéis ver la función es bastante compleja. Vamos a intentar aclarar un poco el asunto:
Esta función nos retorna el descriptor del objeto del núcleo de tipo "File". Si se indicó la bandera OPEN_ALWAYS o CREATE_ALLWAYS y el archivo existe, se retorna ERROR_ALREADY_EXISTS, y si se ha producido algún error, se retornará INVALID_HANDLE_VALUE.
Una vez que esté abierto el fichero, y ya no lo necesitemos más, debemos cerrarlo a través de la función propia para cerrar objetos del núcleo: CloseHandle.
Para los programadores de C++Builder, otra opción puede ser utilizar un objeto de cualquier descendiente de la clase THandleStream que nos proporciona la VCL, aunque no vamos a entrar en este caso, ya que nuestro objetivo es centrarnos en el API Win32.
La función CreateFile en realidad se utiliza para abrir cualquier dispositivo de E/S: desde un fichero de disco o una partición física, hasta un puerto de comunicaciones, aunque nosotros nos vamos a centrar en los ficheros de disco, que es el caso que nos ocupa.
El prototipo de la función es el siguiente:
HANDLE CreateFile( LPCTSTR lpArchivo, DWORD dwModoAcceso, DWORD dwCompartir, LPSECURITY_ATTRIBUTES lpSecuridad, DWORD dwCreation, DWORD dwAtributos, HANDLE hFicheroPlantilla );
Como podéis ver la función es bastante compleja. Vamos a intentar aclarar un poco el asunto:
- lpArchivo: un puntero a una cadena con el nombre y ruta del archivo a abrir.
- dwModoAcceso: indica el modo de apertura, pudiendo ser una combinación de los siguientes valores:
- GENERIC_READ: para modo lectura.
- GENERIC_WRITE: para modo escritura.
- 0: para modo consulta. Este modo se utiliza consultar/modificar los atributos del archivo sin leer ni alterar su contenido.
- dwCompartir: indica si se podrá compartir del archivo mientras esté abierto por nuestro proceso. Si no queremos que pueda ser abierto, debemos indicar un 0. Si queremos compartirlo de algún modo podemos usar cualquier combinación de los siguientes valores:
- FILE_SHARE_READ: se permiten aperturas en modo lectura.
- FILE_SHARE_WRITE: se permiten aperturas en modo escritura.
- lpSeguridad: un puntero a la estructura de seguridad, para indicar si el descriptor creado puede ser heredado en los subprocesos. Los sistemas Windos 95/98/Me no soportan esta característica de seguridad de descriptores. Indicando un NULL se utilizará las opciones por defecto (no heredable).
- dwCreacion:especifica el modo en que se comportará la función cuando el archivo no exista. Los posibles valores son:
- CREATE_NEW: crea un nuevo archivo y falla si el archivo ya existe.
- CREATE_ALWAYS: crea un nuevo archivo sobrescribiendo si existe.
- OPEN_EXISTING: abre el archivo sin crearlo y falla si no existe.
- OPEN_ALWAYS: abre el archivo sin existe o lo crea si no existe.
- TRUNCATE_EXISTING: abre el archivo vaciándolo, y falla si no existe.
- dwAtributos: indica los atributos con que se marcará al archivo una vez realizada la apertura. Se puede pasar cualquier combinación de los siguientes valores:
- FILE_ATTRIBUTE_ARCHIVE: indica que se debe marcar como "archivado".
- FILE_ATTRIBUTE_COMPRESSED: indica que los datos deben comprimirse (sólo válido en sistemas NTFS).
- FILE_ATTRIBUTE_HIDDEN: indica que debe marcarse como "oculto".
- FILE_ATTRIBUTE_NORMAL: se deben eliminar todos los atributos que tenga el archivo. Este valor no puede combinarse con ningún otro.
- FILE_ATTRIBUTE_READONLY: indica que está marcado como "sólo lectura".
- FILE_ATTRIBUTE_SYSTEM: se debe marcar como archivo de sistema, lo que indica que no puede ser escrito ni borrado.
- FILE_ATTRIBUTE_TEMPORARY: se debe marcar como archivo temporal. El sistema de archivos trata a los archivos temporales de forma distinta, intentando mantener el archivo continuamente en memoria RAM. Además de estos atributos, se pueden combinar una serie de banderas para modificar el comportamiento de la función. No vamos a entrar en estos detalles, ya que para nuestros ejemplos no vamos a utilizarlas.
- hFicheroPlantilla: indica el descriptor de un fichero abierto. Este fichero se utilizará como plantilla y se copiarán todos los atributos al nuevo archivo.
Esta función nos retorna el descriptor del objeto del núcleo de tipo "File". Si se indicó la bandera OPEN_ALWAYS o CREATE_ALLWAYS y el archivo existe, se retorna ERROR_ALREADY_EXISTS, y si se ha producido algún error, se retornará INVALID_HANDLE_VALUE.
Una vez que esté abierto el fichero, y ya no lo necesitemos más, debemos cerrarlo a través de la función propia para cerrar objetos del núcleo: CloseHandle.
Valora este capítulo:
Autor y licencia de 'Los rincones del API Win32: Archivos proyectados en memoria - Objeto File (archivo)'
|
Opiniona sobre 'Los rincones del API Win32: Archivos proyectados en memoria - Objeto File (archivo)' (1)
Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.
Opina sobre este tutorial |
Wikis relacionados con 'Los rincones del API Win32: Archivos proyectados en memoria - Objeto File (archivo)'
Curso que profundiza en el gestor de montones (o montículos) dentro de Win32, así como...
Más »
Aprenderás a utilizar uno de los mejores clientes P2P que actualmente existe (o sobrevive), a...
Más »
Con este articulo serás capaz de instalar el eMule en tu ordenador y comenzar a...
Más »
Aprenderás a acelerar el arranque de tu ordenador y a eliminar algunos virus que se...
Más »
¿Qué es una imagen ISO? Las imágenes ISO son archivos que siguen los estándares ISO-9660...
Más »


