0% encontró este documento útil (0 votos)
41 vistas8 páginas

Practica8 PDF

El documento describe los formatos para prácticas de laboratorio en la carrera de LSC en la Universidad Autónoma de Baja California, enfocándose en el manejo de archivos en programación. Se detallan las funciones de apertura, lectura, escritura y cierre de archivos en C, así como el uso de punteros y estructuras para almacenar datos. Además, se enfatiza la importancia de verificar la correcta apertura y cierre de archivos para evitar problemas de corrupción de datos.

Cargado por

Miguel Dextre
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • desarrollo de práctica,
  • resultados,
  • buffer,
  • C,
  • funciones estándar,
  • manejo de información,
  • tipos de datos,
  • puntero FILE,
  • ejemplos de código,
  • permanencia de datos
0% encontró este documento útil (0 votos)
41 vistas8 páginas

Practica8 PDF

El documento describe los formatos para prácticas de laboratorio en la carrera de LSC en la Universidad Autónoma de Baja California, enfocándose en el manejo de archivos en programación. Se detallan las funciones de apertura, lectura, escritura y cierre de archivos en C, así como el uso de punteros y estructuras para almacenar datos. Además, se enfatiza la importancia de verificar la correcta apertura y cierre de archivos para evitar problemas de corrupción de datos.

Cargado por

Miguel Dextre
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Temas abordados

  • desarrollo de práctica,
  • resultados,
  • buffer,
  • C,
  • funciones estándar,
  • manejo de información,
  • tipos de datos,
  • puntero FILE,
  • ejemplos de código,
  • permanencia de datos

Fecha de efectividad: _______________

UNIVERSIDAD AUTNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD

Formatos para prcticas de laboratorio


CARRERA
LSC

PLAN DE ESTUDIO
2003-1

CLAVE ASIGNATURA
5221

NOMBRE DE LA ASIGNATURA
L !"#$% & P'("'$)$*+,! E-.'#*.#'$&$

PR/CTICA N(0

LABORATORIO DE NOMBRE DE LA PR/CTICA

L+* !*+$&( ! S+-. )$- C()1#.$*+(!$2 -

DURACIN (3ORA)
9

A'*5+6(- & T 7.( 8 B+!$'+(-

10 INTRODUCCIN
El almacenamiento de datos en variables y en arreglos es temporal, al terminar un programa todos los datos se pierden, para la conservacion permanente de grandes cantidades de datos se utilizan los archivos en dispositivos de almacenamiento secundario, especialmente en dispositivos de almacenamiento en disco.

20 OBJETIVO (COMPETENCIA)
El alumno aplicar el uso de archivos para el manejo de informacin en un dispositivo secundario

30 FUNDAMENTO
ara entrar en materia vamos a analizar un ejemplo !ue lee un archivo de te"to y lo muestra en la pantalla: #include <stdio.h> int main() { FILE *archivo; char letra; archivo = fopen("[Link]","r"); if (archivo==NULL) { printf( "No se puede abrir el archivo." ); exit( 1 ); } printf( "Contenido del archivo:" ); letra=getc(archivo); while (feof(archivo)==0) {

Formul

#evis

$prob

$utoriz

L0I0 3+2&$ O2+6+$ A2:$'';! P$&+22$ I!"0 E6$ 3 '' '$ R$)<' = I!"0 G0 A!">2+*$ F2(' - R+6 '$
%aestro

L0S0C0 M,!+*$ C'+-.+!$ L$) M('$

M0C0 M+"# 2 /!" 2 M$'.<! = R() '(

&oordinador de rograma Educativo

'estin de &alidad

(irector de la Facultad
&digo '&)*+),-. #evisin -

gina 1

de 8

Fecha de efectividad: ______________________

UNIVERSIDAD AUTNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD

Formatos para prcticas de laboratorio


printf( "%c",letra ); letra=getc(archivo); } if (fclose(archivo)!=0) printf( "Problemas al cerrar el archivo" ); } EL PUNTERO FILE /odas las funciones de estrada0salida estndar usan este puntero para conseguir informacin sobre el archivo abierto. Este puntero no apunta al archivo sino a una estructura !ue contiene informacin sobre 1l. Esta estructura incluye entre otras cosas informacin sobre el nombre del archivo, la direccin de la zona de memoria donde se almacena el archivo, tama2o del buffer. ABRIR EL ARC3IVO0-$hora vamos abrir el archivo. ara ello usamos la funcin fopen. FILE *fopen(const char *nombre_archivo, const char *modo); El nombre de archivo se puede indicar directamente 3como en el ejemplo4 o usando una variable. El archivo se puede abrir de diversas formas. Esto se especifica con el parmetro modo. 5os modos posibles son: r $bre un archivo e"istente para lectura. 6 &rea un archivo nuevo 3o borra su contenido si e"iste4 y lo abre para escritura. a $bre un archivo 3si no e"iste lo crea4 para escritura. El puntero se sit7a al final del archivo, de forma !ue se puedan agregar datos si borrar los e"istentes. 8e pueden a2adir una serie de modificadores siguiendo a los modos anteriores: b $bre el archivo en modo binario. t $bre el archivo en modo te"to. 9 $bre el archivo para lectura y escritura. Ejemplos de combinaciones: rb9 $bre el archivo en modo binario para lectura y escritura. 69 &rea 3o lo borra si e"iste4 un archivo para lectura y escritura. rt $bre un archivo e"istente en modo te"to para lectura. :na cosa muy importante despu1s de abrir un archivo es comprobar si realmente est abierto. El sistema no es infalible y pueden producirse fallos: el archivo puede no e"istir, estar danado o no tener permisos de lectura. 8i intentamos realizar operaciones sobre un puntero tipo F;5E cuando no se ha conseguido abrir el archivo puede haber problemas. or eso es importante comprobar si se ha abierto con 1"ito. 8i el archivo no se ha abierto el puntero archivo 3puntero a F;5E4 tendr el valor *:55, si se ha abierto con 1"ito tendr un valor distinto de *:55. or lo tanto para comprobar si ha habido errores nos fijamos en el valor del puntero: if (archivo==NULL) { printf( "No se puede abrir el archivo." ); exit( 1 ); } !bloc"#uote$ 8i archivo<<*:55 significa !ue no se ha podido abrir por algun error. 5ectura del archivo " .* lee los caracteres uno a uno. ?" .- lee l=neas completas desde un archivo &uando entramos en el ciclo 6hile, la lectura se realiza hasta !ue se encuentre el final del archivo. &digo '&)*+),-. #evisin gina 2

de 8

Fecha de efectividad: ______________________

UNIVERSIDAD AUTNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD

Formatos para prcticas de laboratorio


ara detectar el final del archivo se pueden usar dos formas: con la funcin ? (?() comprobando si el valor de letra es EOF. En el ejemplo hemos usado la funcin feof. Esta funcin comprueba si se ha llegado al final de archivo en cuyo caso devuelve un valor distinto de ,. 8i no se ha llegado al final de archivo devuelve un cero. or eso lo usamos.&uando trabajamos con archivos de te"to no hay ning7n problema, pero si estamos manejando un archivo binario podemos encontrarnos E>F antes del fin de archivo. or eso es mejor usar feof. :na vez realizadas todas las operaciones deseadas sobre el archivo hay !ue cerrarlo. Es importante no olvidar este paso pues el archivo podr=a corromperse. $l cerrarlo se vacian los buffers y se guarda el archivo en disco. :n archivo se cierra mediante la funcin ?*2(- 3fichero4. 8i todo va bien fclose devuelve un cero, si hay problemas devuelve otro valor. Estos problemas se pueden producir si el disco esta lleno.
?include @[Link] int main3 4 B F;5E CficheroD char te"toE-,,FD fichero<fopen3Gorigen.t"tG,GrG4D if 3fichero<<*:554 B printf3 G*o se puede abrir el archivo.G 4D e"it3 - 4D H printf3 G&ontenido del archivo:G 4D fgets3te"to,-,,,fichero4D 6hile 3feof3fichero4<<,4 B printf3 GIsG,te"to 4D fgets3te"to,-,,,fichero4D H if 3fclose3fichero4J<,4 printf3 G roblemas al cerrar el archivoG 4D H

E8&#;/:#$ (E :* $#&K;L> El siguiente paso, como antes, es abrir el archivo usando fopen. 5a diferencia es !ue ahora tenemos !ue abrirlo para escritura. :samos el modo: 6 3crea el archivo o lo vac;a si e"iste4 por!ue !ueremos crear un archivo. #ecordemos !ue despues de abrir un archivo hay !ue comprobar si la operacion se ha realizado con e"ito. Funciones de escritura: 1#.* escribe un caracter en el archivo ?1#.- escribe una cadena en el archivo EME% 5>: %include stdio.h$ int &ain() { '(L) *ori+en, *destino; char letra; ori+en=fopen("ori+[Link]","r"); destino=fopen("[Link]","-"); if (ori+en==NULL .. destino==NULL) { &digo '&)*+),-. #evisin gina 3

de 8

Fecha de efectividad: ______________________

UNIVERSIDAD AUTNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD

Formatos para prcticas de laboratorio


printf( "/roble&as con los archivos." ); exit( 1 ); } letra=+etc(ori+en); -hile (feof(ori+en)==0) { putc(letra,destino); printf( "1c",letra ); letra=+etc(ori+en); } if (fclose(ori+en)2=0) printf( "/roble&as al cerrar el archivo ori+[Link]" ); if (fclose(destino)2=0) printf( "/roble&as al cerrar el archivo [Link]" ); } *unca debemos olvidar al trabajar con archivos: cerrarlos. (ebemos cerrar tanto los archivos !ue leemos como a!uellos sobre los !ue escribimos. 5as funciones !ue hemos visto hasta ahora 3getc, putc, fgets, fputs4 son adecuadas para trabajar con caracteres 3byte4 y cadenas. ero, N!ue sucede cuando !ueremos trabajar con otros tipos de datosO 8upongamos !ue !ueremos almacenar variables de tipo int en un archivo.&omo las funciones vistas hasta ahora solo pueden operar con cadenas deberiamos convertir los valores a cadenas 3con la funcin itoa4. ara recuperar luego estos valores deberiamos leerlos como cadenas y pasarlos a enteros 3atoi4. Lamos a utilizar las funciones fread y f6rite. Estas funciones nos permiten tratar con datos de cual!uier tipo, incluso con estructuras. ?@'+. *os permite escribir en un archivo. Esta funcion tiene el siguiente formato: size_t fwrite(void *buffer, size_t tamano, size_t numero, FILE *pfichero); buffer ) variable !ue contiene los datos !ue vamos a escribir en el archivo. ta&a3o ) el tama2o del tipo de dato a escribir. uede ser un int, un float, una estructura, ... ara conocer su tama2o usamos el operador si4eof. n5&ero ) el numero de datos a escribir. pfichero ) El puntero al archivo sobre el !ue trabajamos. ara !ue !uede mas claro e"aminemos el siguiente ejemplo: rograma de una agenda personal !ue guarda el nombre, apellido y tel1fono de cada persona.
%include stdio.h$ struct { char no&bre6708; char apellido6708; char telefono6198; } re+istro; int &ain() { '(L) *fichero; fichero = fopen( "no&[Link]", "a" ); do { printf( "No&bre: " ); fflush(stdout); +ets(re+[Link]&bre); if (strc&p(re+[Link]&bre,"")) {

&digo '&)*+),-. #evisin gina 4

de 8

Fecha de efectividad: ______________________

UNIVERSIDAD AUTNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD

Formatos para prcticas de laboratorio


printf( ";pellido: " ); fflush(stdout); +ets(re+[Link]); printf( "<el=fono: " ); fflush(stdout); +ets(re+[Link]); f-rite( >istro, si4eof(re+istro), 1, fichero ); } } -hile (strc&p(re+[Link]&bre,"")2=0); fclose( fichero ); }

*>/$: El ciclo termina cuando el nombre se deja en blanco. Este programa guarda los datos personales mediante f6rite usando la estructura registro. $brimos el archivo en modo a 3append, a2adir4, para !ue los datos !ue introducimos se a2adan al final del archivo. :na vez abierto abrimos estramos en un bucle do)6hile mediante el cual introducimos los datos. 5os datos se van almacenando en la variable registro 3!ue es una estructura4. :na vez tenemos todos los datos de la persona los metemos en el archivo con f6rite: fwrite( istro, sizeof(registro), , fichero ); re+istro ) es la variable 3en este caso una estructura4 !ue contiene la informacion a meter al archivo. si4eof3registro4 ) lo utillizamos para saber cul es el n7mero de bytes !ue vamos a guardar, el tama2o en bytes !ue ocupa la estructura. 1 ) indica !ue slo vamos a guardar un elemento. &ada vez !ue se recorre el bucle guardamos slo un elemento. fichero ) el puntero F;5E al archivo donde vamos a escribir. fread 5a funcion fread se utiliza para sacar informacin de un archivo. 8u formato es: size_t fread(void *buffer, size_t tamano, size_t numero, FILE *pfichero); 8iendo buffer la variable donde se van a escribir los datos le=dos del archivo pfichero. El valor !ue devuelve la funcion indica el n7mero de elementos de tama2o tamano !ue ha conseguido leer. *osotros podemos pedirle a fread !ue lea -, elementos 3numero<-,4, pero si en el archivo slo hay P elementos fread devolver el n7mero P. 8iguiendo con el ejemplo anterior ahora vamos a leer los datos !ue hab=amos introducido en !():' -0.7..
include% stdio.h$ struct { char no&bre6708; char apellido6708; char telefono6198; } re+istro; int &ain() { '(L) *fichero; fichero = fopen( "no&[Link]", "r" ); -hile (2feof(fichero)) { if (fread( re+istro, si4eof(re+istro), 1, fichero )) { printf("No&bre: 1s", re+[Link]&bre ); printf(";pellido: 1s", re+[Link]); printf("<el=fono: 1s", re+[Link]); } } fclose( fichero ); }

5a funcin fread lee un registro 3numero<-4 del tama2o de la estructura registro.

&digo '&)*+),-. #evisin gina 5

de 8

Fecha de efectividad: ______________________

UNIVERSIDAD AUTNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD

Formatos para prcticas de laboratorio


8i realmente ha conseguido leer un registro la funcin devolver un -, en cuyo caso la condicin del +? ser verdadera y se imprimir el registro en la pantalla. En caso de !ue no !ueden ms registros en el archivo, fread devolver , y no se mostrar nada en la pantalla. fsee! " fte## fsee! 5a funcin fseeQ nos permite situarnos en la posicin !ue !ueramos de un archivo abierto. &uando leemos un archivo hay un puntero !ue indica en !u1 lugar del archivo nos encontramos. &ada vez !ue leemos datos del archivo este puntero se desplaza. &on la funcin fseeQ podemos situar este puntero en el lugar !ue deseado. El formato de fseeQ es el siguiente: int fsee!(FILE *pfichero, #ong desp#azamiento, int modo); &omo siempre pfichero es un puntero de tipo F;5E !ue apunta al archivo con el !ue !ueremos trabajar. despla4a&iento son las posiciones 3o bytes4 !ue !ueremos desplazar el puntero. Este desplazamiento puede ser de tres tipos dependiendo del valor de modo: SEEABSET El puntero se desplaza desde el principio del archivo. SEEABCUR El puntero se desplaza desde la posicin actual del archivo. SEEABEND El puntero se desplaza desde el final del archivo. 8i se produce alg7n error al intentar posicionar el puntero, la funcion devuelve un valor distinto de ,. 8i todo ha ido bien el valor devuelto es un ,. En el siguiente ejemplo se muestra el funcionamiento de fseeQ. 8e trata de un programa !ue lee la letra !ue hay en la posicin !ue especifica el usuario.
?include @[Link] int main34 B F;5E CficheroD long posicionD int resultadoD fichero < fopen3 Gorigen.t"tG, GrG 4D printf3 GNRu1 posicin !uieres leerO G 4D fflush3stdout4D scanf3 GI(G, Sposicion 4D resultado < fseeQ3 fichero, posicion, 8EET_8E/ 4D if 3Jresultado4 printf3 GEn la posicin I( est la letra Ic.G, posicion, getc3fichero4 4D else printf3 G roblemas posicionando el cursor.G 4D fclose3 fichero 4D H

?. 22 Esta funcin es complementaria a fseeQ, devuelve la posicin actual dentro del archivo. 8u formato es el siguiente: long ftell3F;5E Cpfichero4D El valor !ue nos da ftell puede ser usado por fseeQ para volver a la posicin actual. ?1'+!.? 8 ?-*$!? Estas dos funciones trabajan igual !ue sus e!uivalentes printf y scanf. 5a 7nica diferencia es !ue podemos especificar el archivo sobre el !ue operar 3si se desea puede ser la pantalla para fprintf o el teclado para fscanf4. 5os formatos de estas dos funciones son: int fprintf3F;5E Cpfichero, const char Cformato, ...4D int fscanf3F;5E Cpfichero, const char Cformato, ...4D

&digo '&)*+),-. #evisin gina 6

de 8

Fecha de efectividad: ______________________

UNIVERSIDAD AUTNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD

Formatos para prcticas de laboratorio

90 PROCEDIMIENTO (DESCRIPCIN) A) ECUIPO NECESARIO


&omputadora con 5inu" instalado rctica impresa

MATERIAL DE APODO

B)

DESARROLLO DE LA PR/CTICA

El desarrollo de esta prctica ser la elaboracin de los ejercicios realizados en la 1';*.+*$ !(0 E 3 referente a arreglos de estructuras4, es decir, !ue la prctica !ue le haya correspondido se har con archivos binarios.

&digo '&)*+),-. #evisin gina 7

de 8

Fecha de efectividad: ______________________

UNIVERSIDAD AUTNOMA DE BAJA CALIFORNIA FACULTAD DE INGENIERA (UNIDAD MEXICALI) DOCUMENTO DEL SISTEMA DE CALIDAD

Formatos para prcticas de laboratorio

C) 50 RESULTADOS D CONCLUSIONES

C/LCULOS D REPORTE

El maestro evaluar de manera individual sobre el funcionamiento de archivos.

$l finalizar esta practica el alumno podr utilizar $rchivos de manera eficiente

F0 ANEXOS
#eferencia a archivos

E0 REFERENCIAS

&digo '&)*+),-. #evisin gina 8

de 8

Common questions

Con tecnología de IA

fread and fwrite extend C's capabilities by allowing the reading and writing of different data types directly into and from files, not limited to characters and strings. These functions enable handling structures and arrays, providing the ability to store and retrieve complex data types efficiently, including binary data such as images or executable files. fwrite writes data from a buffer to a file considering a specified number of elements and their size, while fread does the reverse. This binary handling is essential for applications requiring precise data manipulation and storage .

Closing a file in C after operations is crucial to ensure data integrity and resource management. The fclose function flushes buffers, ensuring all data is written to disk, and releases the file descriptor for other processes. Failure to close a file may lead to data loss as unwritten data in buffers might not make it to the storage, and system resources may be unnecessarily tied up leading to memory leaks and potential file corruption, significantly impacting program stability and performance .

Different file opening modes in C define how a file will be accessed and manipulated. For instance, opening a file with 'w' overwrites existing content, effectively clearing the file upon opening. In contrast, 'a' appends data to the end without modifying existing content. Modes like 'r+' enable both reading and writing without clearing the file, while 'w+' is for reading and writing but clears the file initially. Understanding and using the correct mode is crucial, especially when preserving pre-existing data is important .

Key differences in file handling between text and binary files include the mode in which they are opened and how EOF is handled. Text files are typically opened with modes like 'r', 'w', or 'a', while binary files use 'rb', 'wb', or 'ab'. In text files, EOF detection works smoothly with feof(), but in binary files, relying solely on feof() can sometimes lead to incorrect results since the EOF may appear mid-file. Therefore, care must be taken to avoid premature termination. Moreover, text file operations interpret and translate data based on the operating system, such as converting line endings, while binary file operations process data as a continuous stream of bytes without modification .

feof is not always reliable for binary files as EOF might appear prematurely due to certain byte sequences resembling an EOF marker, leading to incorrect end-of-file detection. An alternative approach would be checking the return value of fread, which indicates how many elements were successfully read. If the number of elements read is less than requested, it likely indicates EOF. This method provides more precise control over binary data processing .

fprintf and fscanf extend functionality to file I/O operations by allowing formatted reading and writing directly to files, similar to how printf and scanf operate with standard input and output streams. They enable the format-specific reading and writing of diverse data types, seamlessly integrating data persistence with formatted output capabilities, which is essential for structured file manipulation and storage .

To ensure a file is correctly opened in C, you should immediately check if the file pointer is NULL after calling fopen(). If the value of the file pointer is NULL, it indicates an error in opening the file, possibly due to non-existence, damage, or lack of permissions. This check prevents further erroneous read or write operations. If the file is successfully opened, the pointer will not be NULL, permitting subsequent operations .

Structured data storage using fwrite and fread in C provides efficient handling of complex data types and structures, such as structs, by writing and reading binary representations. This ensures fast I/O operations and minimal data transformation overhead. However, this approach risks serialization issues across different systems due to endianness and differing struct padding, possibly leading to data corruption if handled improperly. Thus, cross-platform applications require careful consideration of data serialization standards to mitigate these risks .

fseek and ftell functions are used for navigating and obtaining the current position in a file. fseek(FILE *pfichero, long desplazamiento, int modo) allows you to move the file position indicator to a desired point governed by the mode (SEEK_SET, SEEK_CUR, or SEEK_END) regarding the beginning, current position, or end of the file. ftell(FILE *pfichero) returns the current file position indicator, helping restore a point in the file if needed. They are crucial for efficiently navigating large files, especially in binary files where exact positional control is necessary. However, incorrect use can lead to data misreads or overwrites .

Combining fseek and fread in C allows precise and efficient random access to file contents, essential for non-linear data processing. fseek adjusts the file pointer to any specified position within the file, while fread can then read data starting from this position. This capability is crucial for applications requiring data retrieval from specific file locations without reading the entire file, optimizing performance and enabling real-time data processing in complex applications like databases or large data sets .

También podría gustarte