Compartir tecnología

[Lenguaje C] Juega con operaciones de archivos

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

🌟🌟Página de inicio del autor:efímeros__

🌟🌟Columna de pertenencia:lenguaje c

Tabla de contenido

introducción

1. Abrir y cerrar archivos

1. fluir

2. Flujo estándar

3. Archivos de texto y archivos binarios.

4. Funciones que controlan la apertura y cierre de archivos

2. Lectura y escritura secuencial de archivos.

3. Lectura y escritura aleatoria de archivos.

1.función de búsqueda

2.función ftell

3.función de rebobinado

4. Determinación del final de la lectura del archivo.

Resumir


introducción

Cuando escribimos programas, a menudo almacenamos datos en variables. Si el programa sale y se recupera la memoria, estos datos se perderán. Entonces, ¿hay alguna forma de guardar estos datos de manera persistente para que sigan existiendo cuando se abra nuevamente el programa? La respuesta es sí. Lo que puede hacer esto es:Operaciones de archivos

1. Abrir y cerrar archivos

1. fluir

Los datos del programa deben enviarse a dispositivos externos y también deben ingresarse desde dispositivos externos. Para diferentes dispositivos, los métodos de entrada y salida son diferentes. Para facilitar nuestras operaciones en varios dispositivos de entrada y salida, tenemos el concepto altamente abstracto de "flujo". En el lenguaje C, las operaciones de entrada y salida en archivos, pantallas, teclados, etc. se realizan a través de "flujos". En general, si queremos escribir datos o leer datos, necesitamos abrir la secuencia.

2. Flujo estándar

Cuando se inicia un programa en lenguaje C, el valor predeterminado estres corrientesYa abierto para nosotros:

entrada estándar--Flujo de entrada estándar, entrada desde el teclado en la mayoría de los casos.

salida estándar--Flujo de salida estándar, salida al monitor en la mayoría de los casos.

error estándar--Secuencia de errores estándar, salida al monitor en la mayoría de los casos.

Debido a que estos tres flujos se han abierto de forma predeterminada, podemos realizar operaciones de entrada y salida directamente utilizando funciones como scanf y printf.

Estas tres corrientes también tienen tipos. Sus tipos son:Puntero de archivo (ARCHIVO*) .Cuando realizamos operaciones con archivos, pasamosLa variable de puntero de archivo puede encontrar indirectamente el archivo asociado a ella.

3. Archivos de texto y archivos binarios.

Dependiendo de cómo estén organizados los datos, los archivos de datos se denominanArchivo de textooarchivo binario . Los datos se almacenan en forma binaria en la memoria,Si se envía a un archivo de almacenamiento externo sin conversión, esarchivo binario
Si es necesario almacenarlo en código ASCII en un almacenamiento externo, es necesario convertirlo antes del almacenamiento.Un archivo almacenado en forma de caracteres ASCII esArchivo de texto
¿Cómo se almacena un dato en un archivo?
Los caracteres siempre se almacenan en formato ASCII y los datos numéricos se pueden almacenar en formato ASCII o binario. Por ejemplo, si hay un número entero 10000, si se envía al disco en forma de código ASCII, ocupará 5 bytes en el disco (un byte por cada carácter), mientras que si se envía en formato binario, Solo ocupará 4 bytes en el disco.

4. Funciones que controlan la apertura y cierre de archivos

Después de comprender este conocimiento previo, vayamos al grano: abrir y cerrar archivos. El lenguaje C proporciona dos funciones, que son responsables de abrir y cerrar archivos respectivamente. Los prototipos son los siguientes:

abrir un archivo:
ARCHIVO * abrir ( const char * nombre_archivo, const char * modo );
Cierra el archivo:
En t cerrar ( ARCHIVO * stream );

La función fopen tiene dos parámetros,El primer parámetro se expresa en forma de cadena.Nombre del archivo, el segundo parámetro es el archivométodo abierto, representado por una cadena .Al usar esta función, necesitamos crear unvariable de puntero de archivo Para recibir, cuando el archivo no se abre, devuelve un puntero nulo. En cuanto a los métodos de apertura, aquí están los siguientes:

método abiertosignificadoSi el archivo especificado no existe
"r" (solo lectura)
Para ingresar datos, abra un archivo de texto existente
Devuelve un puntero nulo
"w" (sólo escritura)
Para generar datos, abra un archivo de texto
Crear un nuevo archivo
"a" (añadir)Agregar datos al final del archivo de textoCrear un nuevo archivo
"rb" (solo lectura)Para ingresar datos, abra un archivo binarioDevuelve un puntero nulo
"wb" (sólo escritura)Para generar datos, abra un archivo binarioCrear un nuevo archivo
"ab" (añadir)Agregar datos al final de un archivo binarioCrear un nuevo archivo
"r+" (leer y escribir)Para leer y escribir, abra un archivo de textoDevuelve un puntero nulo
"w+" (leer y escribir)Para leer y escribir, cree un nuevo archivo de texto.Crear un nuevo archivo
"a+" (leer y escribir)Abra un archivo y lea y escriba al final del archivo.Crear un nuevo archivo
"rb+" (lectura y escritura)Abrir un archivo binario para leer y escribir.Devuelve un puntero nulo
"wb+" (lectura y escritura)
Para leer y escribir, cree un nuevo archivo binarioCrear un nuevo archivo
"ab+" (lectura y escritura)
Abra un archivo binario y lea y escriba al final del archivo.Crear un nuevo archivo

Para la función fclose, su parámetro es el puntero de archivo, que se utiliza para cerrar el archivo al que apunta el puntero de archivo.

A continuación, intentamos abrir y cerrar un archivo:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE* pf = fopen("test.txt", "w");
  5. if (pf == NULL)//文件打开失败则退出程序
  6. {
  7. perror("fopen");
  8. return 0;
  9. }
  10. printf("文件打开成功n");
  11. fclose(pf);
  12. pf = NULL;//避免出现野指针,及时制空
  13. return 0;
  14. }
resultado de la operación:

Se puede ver que dado que el método de apertura es "w", aparece un archivo llamado "test.txt" en la ruta.

2. Lectura y escritura secuencial de archivos.

A continuación, presentamos varias funciones paraLeer o escribir datos en un archivo.

Nombre de la funciónFunciónAplicable a
fgetcFunción de entrada de caracteresTodos los flujos de entrada
fputcfunción de salida de caracteresTodos los flujos de salida
olvidaFunción de entrada de línea de textoTodos los flujos de entrada
salidasFunción de salida de línea de textoTodos los flujos de salida
escaneo fscanFunción de entrada de formatoTodos los flujos de entrada
fprintfFunción de formato de salida Todos los flujos de salida
miedoentrada binariaFlujo de entrada de archivos
fescribeSalida binariaFlujo de salida de archivos

A continuación intentamos utilizarescaneo fscanyfprintffunción:

El primer parámetro de estas dos funciones es un puntero de archivo, que se utiliza para leer y escribir datos de archivos. Los parámetros siguientes son los mismos que los de las funciones scanf y printf.

  1. #include <stdio.h>
  2. int main()
  3. {
  4. FILE* pf = fopen("test.txt", "w");//要写入数据,以写的形式打开文件
  5. if (pf == NULL)
  6. {
  7. perror("fopen");
  8. return 0;
  9. }
  10. fprintf(pf, "123456");//向文件中写入数据
  11. fclose(pf);
  12. pf = NULL;
  13. return 0;
  14. }

Como puede ver, los datos se han escrito en el archivo. A continuación usamos la función fscanf para imprimir los datos del archivo en la pantalla:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. char str[20] = { 0 };
  5. FILE* pf = fopen("test.txt", "r");//要读取数据,以读的形式打开文件
  6. if (pf == NULL)
  7. {
  8. perror("fopen");
  9. return 0;
  10. }
  11. fscanf(pf, "%s", str);//读取数据到str当中
  12. printf(str);
  13. fclose(pf);
  14. pf = NULL;
  15. return 0;
  16. }
resultado de la operación:

3. Lectura y escritura aleatoria de archivos.

1.función de búsqueda

La función de la función fseek esSegún la posición y el desplazamiento del puntero del archivoposiciónpuntero de archivo . Su prototipo es el siguiente:

int fseek ( ARCHIVO * flujo, long int desplazamiento, int origen );

Su primer parámetro es el puntero del archivo, el segundo parámetro es el desplazamiento relativo a la posición establecida y el tercer parámetro es la posición establecida.

El lenguaje C define tres.Macro, puedes elegir uno de ellos como tercer parámetro:

SEEK_SET: posición inicial del archivo

SEEK_CUR: la posición actual del puntero del archivo

SEEK_END: ​​fin del archivo

Después de ubicar el puntero del archivo, podemos leer o escribir en la ubicación especificada del archivo.

2.función ftell

La función ftell se utiliza para devolverEl desplazamiento del puntero del archivo en relación con la posición inicial. . Prototipo de función:

largo int ftell ( ARCHIVO * stream );

3.función de rebobinado

La función de rebobinado se utiliza paraDevuelve la posición del puntero del archivo al principio del archivo. . Su prototipo de función:

void rewind ( ARCHIVO * stream );

4. Determinación del final de la lectura del archivo.

1. ParaArchivo de texto, primero podemos usarfgetcLa función recorre los caracteres del archivo hasta que se lee EOF, lo que indicaFinaliza la lectura del archivo

2. Paraarchivo binario,UsamosmiedoLa función determina su valor de retorno:¿Es menor que el número real que se va a leer? .Si es menor queTermina la lectura.

Para los dos casos anteriores, el archivoAl final de la lectura, podemos seguir juzgandoMotivo por el que finalizó la lectura del archivo . Introduzca dos funciones:feoyhierro

feoFunción utilizada paraDeterminar el final de la lectura del archivo.razónsi o noFin del archivo encontrado . Su prototipo es el siguiente:

int feof ( ARCHIVO * stream );

Si el expediente se debe aLeer hasta el final del archivoCuando se completa la lectura, se devuelve EOF; en otros casos, se devuelve 0.

        hierroFunción utilizada paraDeterminar el final de la lectura del archivo.razónsi o noSe produjo un error de E/S . El prototipo es el siguiente:

int ferror ( ARCHIVO * stream );

Si el expediente se debe aSe produjo un error de E/SCuando se completa la lectura, se devuelve un valor distinto de cero; en otros casos, se devuelve 0.

A continuación intentamos escribir un fragmento de código para juzgar el final de la lectura del archivo:

  1. #include <stdio.h>
  2. int main()
  3. {
  4. int c = 0;
  5. FILE* fp = fopen("test.txt", "r");
  6. if (fp == NULL)
  7. {
  8. perror("fopen");
  9. return 0;
  10. }
  11. while ((c = fgetc(fp)) != EOF)//返回EOF则读取结束
  12. {
  13. putchar(c);
  14. }
  15. //判断读取结束的原因
  16. if (ferror(fp))
  17. puts("I/O错误n");
  18. else if (feof(fp))
  19. puts("文件读取结束n");
  20. fclose(fp);
  21. fp = NULL;
  22. return 0;
  23. }

Resumir

Hoy aprendimos sobre las operaciones de archivos, cómo abrir y cerrar archivos, escribir datos o leer datos de archivos, funciones para ajustar los punteros de los archivos y determinar el final de la lectura del archivo. Si crees que lo que dijo el blogger es bueno, deja un pequeño me gusta y gracias por tu apoyo❤❤❤