Comprensión profunda de las operaciones con archivos - C(1)

Por qué usar archivos

La libreta de direcciones escrita anteriormente, los datos desaparecerán después de agregar el número de personas y salir del programa. En este momento, los datos se almacenan en la memoria. La próxima vez que se ejecute el programa de libreta de direcciones, se deben volver a ingresar los datos. Es muy incómodo usar una libreta de direcciones de este tipo.

Entonces surgieron las operaciones de archivos.
Hay dos formas de persistir datos: 1. Almacenar datos en archivos de disco 2. Almacenar en base de datos
Usando archivos, podemos almacenar datos directamente en el disco duro de la computadora, logrando así la persistencia de datos.

que es un archivo

Pero en programación, generalmente hablamos de dos tipos de archivos: archivos de programa y archivos de datos (clasificados desde la perspectiva de las funciones de archivo).

Archivos de programa : incluidos los archivos de programa fuente (con el sufijo .c), los archivos de objetos (con el sufijo .obj en el entorno de Windows) y los programas ejecutables (con el sufijo .exe en el entorno de Windows).

Archivo de datos : el contenido del archivo no es necesariamente el programa, sino los datos leídos y escritos cuando se ejecuta el programa, como el archivo del que el programa necesita leer datos o el archivo desde el que se genera el contenido.

La entrada y salida de los datos procesados ​​en los capítulos anteriores se basan en el terminal, es decir, los datos se ingresan desde el teclado del terminal y el resultado de la operación se muestra en la pantalla.

De hecho, a veces enviaremos la información al disco y luego leeremos los datos del disco a la memoria para usarlos cuando sea necesario, y el archivo en el disco se procesará aquí.

nombre del archivo

Un archivo debe tener un identificador de archivo único para la identificación y referencia del usuario.
El nombre del archivo consta de 3 partes: ruta del archivo + tronco del nombre del archivo + sufijo del archivo
Por ejemplo: c:\code\test.txt
Para mayor comodidad, el identificador del archivo a menudo se denomina nombre del archivo.

Algunos conceptos sobre archivos

Puntero de archivo : en el sistema de archivos de búfer, el concepto clave es " 文件类型指针", denominado "puntero de archivo".

Área de información de archivo : cada archivo utilizado tiene un área de información de archivo correspondiente en la memoria, que se utiliza para almacenar la información relevante del archivo (como el nombre del archivo, el estado del archivo y la ubicación actual del archivo, etc). Esta información se almacena en una variable de estructura . El tipo de estructura se declara sistemáticamente y se denomina ARCHIVO .

El archivo de encabezado stdio.h proporcionado por el entorno de compilación VS2013 tiene las siguientes declaraciones de tipo de archivo;

struct _iobuf {
    
    
        char *_ptr;
        int   _cnt;
        char *_base;
        int   _flag;
        int   _file;
        int   _charbuf;
        int   _bufsiz;
        char *_tmpfname;
       };
typedef struct _iobuf FILE;

Cada vez que se abre un archivo, el sistema creará automáticamente una variable de estructura de ARCHIVO de acuerdo con la situación del archivo y completará la información, el usuario no necesita preocuparse por los detalles.

Puntero FILE : Generalmente, las variables de la estructura FILE se mantienen a través de un puntero FILE, que es más cómodo de usar.

A continuación, podemos crear una variable de puntero de ARCHIVO*:

FILE* pf;//文件指针变量

Defina pf para que sea una variable de puntero a datos de tipo ARCHIVO. Puede hacer que pf apunte al área de información del archivo de un archivo (es una variable de estructura). Se puede acceder al archivo a través de la información en el área de información del archivo. Es decir, el archivo asociado a él se puede encontrar a través de la variable de puntero de archivo

inserte la descripción de la imagen aquí

Disposiciones : el archivo debe abrirse antes de leer y escribir , y el archivo debe cerrarse después del final del uso .

Al escribir un programa, al abrir un archivo, devolverá una variable de puntero FILE* para apuntar al archivo, lo que también equivale a establecer la relación entre el puntero y el archivo.

ANSIC estipula que la función fopen se usa para abrir el archivo y fclose para cerrar el archivo

Primero entienda lo que significa leer y escribir.
Escribir archivo : envía a un archivo o pantalla.
Leer archivo : archivo de entrada en la memoria.
inserte la descripción de la imagen aquí

función de archivo

abierto

Prototipo de función :

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

Función :
abrir un archivo.
La función de esta función es abrir un archivo. El primer parámetro de la función es el nombre del archivo que desea abrir , y el segundo parámetro es la forma de abrir el archivo.

Valor de retorno : cada una de estas funciones devuelve un puntero al archivo abierto. Un valor de puntero nulo indica un error.
Devuelve un puntero al archivo, o un puntero nulo si se produce el error de apertura.
Nota: Es necesario comprobar la validez del valor de retorno de fopen

	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return;//失败返回
	}

cerrar

Prototipo de función :

int fclose( FILE *stream );

función

Cierra un flujo (fclose)
Cierra un flujo

Valor
devuelto fclose devuelve 0 si el flujo se cierra con éxito devuelve EOF para indicar un error
devuelve 0 si el flujo se cierra con éxito devuelve EOF(-1) si falla.

código de ejemplo

	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 1;//失败返回
	}

camino absoluto

La ruta absoluta es la ubicación del archivo específico.
P.ej:

D:\c-idioma\c yuyan\c yuyan\datos.txt

FILE* pf = fopen("D:\\c-language\\c yuyan\\c yuyan\data.txt", "r");

Pero para evitar que '\' y los siguientes caracteres de la cadena se consideren como caracteres de escape en su conjunto, es necesario agregar un '\' después de cada '\'.

Cómo se abre el archivo

Los tres primeros son métodos de uso común.
regla:

método de apertura de archivos sentido
"r" (solo lectura) Abra el archivo para la entrada. Si no existe, se informará de un error.
"w" (solo escritura) Para generar datos, abra un archivo de texto. Si existe, borre los datos que contiene y envíelo. Se creará un nuevo archivo si no existe.
"a" (añadir) Agregar datos al final de un archivo de texto. Cree el archivo si no existe.
"rb" (solo lectura) Para ingresar datos, abra un archivo binario. Si no existe, se produce un error.
"wb" (solo escritura) Para generar datos, abra un archivo binario. Si no existe, cree un nuevo archivo.
“Ab” (adicional) Agregar datos al final de un archivo binario. Si no existe, se produce un error.
"r+" (leer y escribir) Abre un archivo para actualizar (entrada y salida). Error si no está presente.
"w+" (leer y escribir) Cree un archivo vacío y ábralo para actualizarlo (entrada y salida). Si ya existe un archivo con el mismo nombre, su contenido se descartará y el archivo se tratará como un nuevo archivo vacío.
"a+" (leer y escribir) Abra un archivo para lectura y escritura al final del archivo. Cree un nuevo archivo si no existe.

proceso de operación de archivos

El siguiente es el flujo general de las operaciones de archivo.

#include <stdio.h>
#include <string.h>
#include <errno.h>
int main()
{
    
    
	//打开文件
	FILE* pf = fopen("data.txt", "r");
	if (pf == NULL)
	{
    
    
		printf("%s\n", strerror(errno));
		return 0;
	}
	//对文件进行一系列操作
	......
	.....
	//关闭文件
	fclose(pf);
	pf = NULL;置空
	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/qq2466200050/article/details/123692752
Recomendado
Clasificación