Mi informacion de contacto
Correo[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
🌟🌟Página de inicio del autor:efímeros__
🌟🌟Columna de pertenencia:lenguaje c
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.
4. Determinación del final de la lectura del archivo.
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。
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.
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.。
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.
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 abierto | significado | Si 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 texto | Crear un nuevo archivo |
"rb" (solo lectura) | Para ingresar datos, abra un archivo binario | Devuelve un puntero nulo |
"wb" (sólo escritura) | Para generar datos, abra un archivo binario | Crear un nuevo archivo |
"ab" (añadir) | Agregar datos al final de un archivo binario | Crear un nuevo archivo |
"r+" (leer y escribir) | Para leer y escribir, abra un archivo de texto | Devuelve 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 binario | Crear 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:
- #include <stdio.h>
-
- int main()
- {
- FILE* pf = fopen("test.txt", "w");
- if (pf == NULL)//文件打开失败则退出程序
- {
- perror("fopen");
- return 0;
- }
- printf("文件打开成功n");
- fclose(pf);
- pf = NULL;//避免出现野指针,及时制空
- return 0;
- }
Se puede ver que dado que el método de apertura es "w", aparece un archivo llamado "test.txt" en la ruta.
A continuación, presentamos varias funciones paraLeer o escribir datos en un archivo.。
Nombre de la función | Función | Aplicable a |
fgetc | Función de entrada de caracteres | Todos los flujos de entrada |
fputc | función de salida de caracteres | Todos los flujos de salida |
olvida | Función de entrada de línea de texto | Todos los flujos de entrada |
salidas | Función de salida de línea de texto | Todos los flujos de salida |
escaneo fscan | Función de entrada de formato | Todos los flujos de entrada |
fprintf | Función de formato de salida | Todos los flujos de salida |
miedo | entrada binaria | Flujo de entrada de archivos |
fescribe | Salida binaria | Flujo 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.
- #include <stdio.h>
-
- int main()
- {
- FILE* pf = fopen("test.txt", "w");//要写入数据,以写的形式打开文件
- if (pf == NULL)
- {
- perror("fopen");
- return 0;
- }
- fprintf(pf, "123456");//向文件中写入数据
- fclose(pf);
- pf = NULL;
- return 0;
- }
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:
- #include <stdio.h>
-
- int main()
- {
- char str[20] = { 0 };
- FILE* pf = fopen("test.txt", "r");//要读取数据,以读的形式打开文件
- if (pf == NULL)
- {
- perror("fopen");
- return 0;
- }
- fscanf(pf, "%s", str);//读取数据到str当中
- printf(str);
- fclose(pf);
- pf = NULL;
- return 0;
- }
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.
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 );
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 );
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:
- #include <stdio.h>
-
- int main()
- {
- int c = 0;
- FILE* fp = fopen("test.txt", "r");
- if (fp == NULL)
- {
- perror("fopen");
- return 0;
- }
- while ((c = fgetc(fp)) != EOF)//返回EOF则读取结束
- {
- putchar(c);
- }
- //判断读取结束的原因
- if (ferror(fp))
- puts("I/O错误n");
- else if (feof(fp))
- puts("文件读取结束n");
- fclose(fp);
- fp = NULL;
- return 0;
- }
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❤❤❤