Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> Lenguaje C

Dominando E/S de archivos en C: Crear, abrir y gestionar archivos

El capítulo anterior explicó dispositivos estándar de entrada/salida. Este cubre cómo los programadores C pueden crear, abrir, cerrar archivos de texto o binarios para almacenamiento de datos.

Un archivo representa una secuencia de bytes, sea texto o binario. C proporciona funciones de alto nivel y llamadas de bajo nivel (nivel SO) para manejar archivos. Este capítulo repasa las llamadas importantes para gestión de archivos.

Abrir archivos

Usa fopen() para crear nuevo archivo o abrir existente. Inicializa un objeto tipo FILE con info para controlar el flujo. Prototipo:

FILE *fopen(const char *filename, const char *mode);

filename es cadena literal para nombrar el archivo; mode puede tener estos valores:

NºModo y Descripción
1

r

Abre archivo de texto existente para lectura.

2

w

Abre para escritura. Si no existe, lo crea. Escribe desde el inicio.

3

a

Abre para escritura en modo append. Si no existe, lo crea. Anexa al contenido existente.

4

r+

Abre para lectura y escritura.

5

w+

Abre para lectura y escritura. Trunca a longitud cero si existe, sino crea.

6

a+

Abre para lectura y escritura. Crea si no existe. Lectura desde inicio, escritura solo append.

Para archivos binarios, usa modos:

"rb", "wb", "ab", "rb+", "r+b", "wb+", "w+b", "ab+", "a+b"

Cerrar un archivo

Usa fclose(). Prototipo:

int fclose(FILE *fp);

Devuelve cero en éxito, EOF si error. Vacía buffer pendiente, cierra archivo y libera memoria. EOF está definido en stdio.h.

Varias funciones de la biblioteca estándar leen/escriben carácter a carácter o cadenas de longitud fija.

Escribir un archivo

Función simple para escribir caracteres individuales:

int fputc(int c, FILE *fp);

fputc() escribe el carácter c en el flujo referenciado por fp. Devuelve carácter escrito o EOF si error.

Para escribir cadena terminada en nulo:

int fputs(const char *s, FILE *fp);

fputs() escribe la cadena s en el flujo. Devuelve valor no negativo en éxito, EOF en error. También puedes usar fprintf(FILE *fp, const char *formato, ...). Ejemplo (asegura directorio /tmp):

#include <stdio.h>
main() {
    FILE *fp;
    fp = fopen("/tmp/test.txt", "w+");
    fprintf(fp, "Esto es prueba para fprintf...\n");
    fputs("Esto es prueba para fputs...\n", fp);
    fclose(fp);
}

Crea test.txt en /tmp y escribe dos líneas. Leamos este archivo en la siguiente sección.

Leer un archivo

Función simple para leer un carácter:

int fgetc(FILE *fp);

fgetc() lee un carácter del archivo referenciado por fp. Devuelve carácter leído o EOF si error.

Función para leer cadena de un flujo:

char *fgets(char *buf, int n, FILE *fp);

fgets() lee hasta n-1 caracteres del flujo fp, copia al buffer buf añadiendo nulo final. Si encuentra '\n' o EOF antes, devuelve solo lo leído hasta ese punto incluyendo nueva línea. También puedes usar fscanf(FILE *fp, const char *formato, ...) pero se detiene en el primer espacio.

#include <stdio.h>
main() {
    FILE *fp;
    char buff[255];
    fp = fopen("/tmp/test.txt", "r");
    fscanf(fp, "%s", buff);
    printf("1: %s\n", buff);
    fgets(buff, 255, (FILE*)fp);
    printf("2: %s\n", buff);
    fgets(buff, 255, (FILE*)fp);
    printf("3: %s\n", buff);
    fclose(fp);
}

Resultado:

1: Esto
2: es prueba para fprintf...
3: Esto es prueba para fputs...

Detalle: fscanf() leyó solo "Esto" (se detuvo en espacio), primer fgets() leyó resto de línea, segundo fgets() leyó segunda línea completa.

Funciones de E/S Binaria

Dos funciones para entrada/salida binaria:

size_t fread(void *ptr, size_t tamaño_elemento, size_t num_elementos, FILE *archivo);
size_t fwrite(const void *ptr, size_t tamaño_elemento, size_t num_elementos, FILE *archivo);

Ambas se usan para leer/escribir bloques de memoria (usualmente arrays o estructuras).

Lenguaje C

  1. Tarjetas I/O Explicadas: Cómo Funcionan y Por Qué Importan
  2. Axiomtek IPS960-511-PoE: Controlador Visión Todo-en-Uno Robusto para Inspección Industrial
  3. Serie EDAM‑4200 de acceed: Módulos I/O integrados para comunicación de datos escalable y fiable
  4. Dominando la entrada/salida en C: scanf() y printf() explicados
  5. Manejo de archivos en C: Dominando E/S con fopen, fprintf, fread y fseek
  6. Dominando funciones en C: Estructura, declaración y mejores prácticas
  7. Entendiendo los Archivos de Cabecera en C: Tipos, Uso y Buenas Prácticas
  8. Entrada/Salida de archivos en C#: Lectura, escritura y gestión de streams
  9. Exportación de Datos desde MATLAB: Formatos y Técnicas
  10. Entrada/Salida de Archivos en Python: Dominando Operaciones de Lectura, Escritura y Gestión
  11. Entrada/Salida de Archivos en Python: Domina las Operaciones I/O