Base de documento en lenguaje C

Resumen del documento

Definición de archivo

El llamado archivo generalmente se refiere a una colección de datos almacenados en medios externos (como discos y cintas).

El sistema operativo gestiona los datos en unidades de archivos.

Clasificación de documentos

① Desde la perspectiva del sistema operativo, cada dispositivo de entrada y salida conectado al host se considera un archivo.
Ejemplo: Archivo de entrada: teclado de terminal
Archivo de salida: pantalla de visualización e impresora

②Desde el punto de vista del usuario:
archivos especiales (archivos de entrada y salida estándar o archivos de equipo estándar)
archivos ordinarios (archivos de disco)

③Según la forma de organización de los datos:
archivo ASCII (archivo de texto): cada byte coloca un código ASCII archivo binario: los datos de la memoria se envían al disco a medida que se almacenan en la memoria. Por
ejemplo: el entero 10000 es en El formato de almacenamiento en la memoria y la salida en formato ASCII y formato binario se muestran en la siguiente figura:
Inserte la descripción de la imagen aquí

Comparación de archivo ASCII y archivo binario:
1. El archivo ASCII es conveniente para procesar caracteres uno por uno, y también es conveniente para generar caracteres. Sin embargo, generalmente ocupa más espacio de almacenamiento y lleva tiempo convertirlo.
2. Los archivos binarios pueden ahorrar espacio de almacenamiento externo y tiempo de conversión, pero un byte no corresponde a un carácter y la forma del carácter no se puede generar directamente.
3. Generalmente, los datos de resultados intermedios deben almacenarse temporalmente en la memoria externa y, si es necesario ingresarlos en la memoria en el futuro, generalmente se guardan en un archivo binario.

④ Método de procesamiento de
archivos: Sistema de archivos de búfer: el sistema abre automáticamente un búfer para cada archivo en uso en el área de memoria. La entrada y salida con el sistema de archivos en búfer también se denomina entrada y salida de disco avanzada.

Sistema de archivos sin búfer: el sistema no abre automáticamente un búfer de cierto tamaño, pero el programa establece el búfer para cada archivo. La entrada y salida con el sistema de archivos sin búfer también se denomina sistema de entrada y salida de bajo nivel.
Inserte la descripción de la imagen aquí

Puntero de tipo de archivo

En el sistema de archivos de búfer, cada archivo utilizado debe abrir un área de tipo ARCHIVO en la memoria para almacenar información relevante sobre el archivo. Una estructura llamada FILE se define en stdio.h.

La única declaración requerida por el puntero de archivo es: el FILE *fp;
puntero de archivo apunta a una estructura que contiene la siguiente información: el nombre del archivo, la ubicación actual del archivo, si el archivo se está leyendo o escribiendo, si hay un error o si se ha llegado al final del archivo

Diagrama esquemático del búfer de archivos: El
Inserte la descripción de la imagen aquí
proceso básico de operación de archivos:
Inserte la descripción de la imagen aquí

Función de archivo

clasificación Nombre de la función Características
abre un archivo fopen () abre un archivo
Cerrar el archivo fclose () Cerrar el archivo
Ubicación del archivo fseek () Cambiar la posición del puntero de posición del archivo
Rebobinar() Vuelva a colocar el puntero de posición del archivo al principio del archivo
Ftell () Devuelve el valor actual del puntero de posición del archivo.
Estado del archivo feof () Si se llega al final del archivo, el valor de la función es verdadero
ferror () Si hay un error en la operación del archivo, el valor de la función es verdadero
clarificador () Hacer cero los valores de las funciones ferror y feof ()
文件读写         fgetc(),getc()从指定文件取得一个字符          
                fputc(),putc()把字符输出到指定文件
                fgets()从指定文件读取字符串
                fputs()把字符串输出到指定文件
                getw()从指定文件读取一个字(int型)
                putw()把一个字输出到指定文件
                fread()从指定文件中读取数据项
                fwrite()把数据项写到指定文件中
                fscanf()从指定文件按格式输入数据
                fprintf()按指定格式将数据写到指定文件中

Apertura de archivos (función fopen)

Llamada de función:

FILE  *fp;
fp=fopen(文件名,使用文件方式);

①El nombre del archivo a abrir, que es el nombre del archivo al que se accede;
②La forma de utilizar el archivo ("leer" o "escribir", etc.);
③Qué variable de puntero apunta al archivo abierto.

Apertura y cierre de archivos:
"r" (solo lectura) para entrada, abra un archivo de texto
"w" (solo escritura) para salida, abra un archivo de texto
"a" (anexar) al texto, agregue datos
"rb" al final del archivo (solo lectura) para la entrada, abra un archivo binario
"wb" (solo escritura) para la salida, abra un archivo binario
"ab" (anexar) agregue los datos
"r +" al final del archivo binario (lea y escribir) abrir uno para lectura / escritura Archivo de texto
"w +" (lectura-escritura) crea un nuevo archivo de texto para lectura / escritura
"a +" (lectura-escritura) abre un archivo de texto para lectura / escritura (agregar)
"rb +" ( lectura-escritura) abre un nuevo archivo de texto para lectura / escritura Archivo binario
"wb +" (lectura-escritura) crea un nuevo archivo binario para lectura / escritura
"ab +" (lectura-escritura) abre un archivo binario para lectura / escritura

¿Cuál es la diferencia entre "r +" y "w +"?
Cuando abre un archivo por primera vez, el archivo no existe, necesita crear el archivo (creación del programa, no creación manual), si usa r + este modo de apertura, volverá a fallar, si usa w + , cuando lo abra por segunda vez. Este archivo se volverá a crear como un archivo nuevo, luego se perderán los datos del archivo original.

Cierre de archivo (función fclose)

Llamada a la
fclose(文件指针);
función : función función:
hacer que la variable del puntero del archivo no apunte al archivo, es decir, la variable del puntero del archivo se "desconecta" del archivo, y luego el puntero ya no se puede usar para leer y escribir el archivo que estaba originalmente asociado con él.
Valor de retorno:
cierre con éxito el valor de retorno 0; de lo contrario, devuelve EOF (-1)

Puntero activo actual (función ftell)

La estructura FILE proporciona un puntero para rastrear dónde ocurre una operación de E / S. Siempre que se lee o escribe un carácter de la secuencia, el puntero activo actual (curp) se moverá hacia adelante, la posición actual del puntero activo actual se puede obtener con la ayuda de la función ftell ().

Prototipo de función: long int ftell(FILE *fp);
Valor de retorno: Devuelve la posición del puntero del archivo cuando tiene éxito, de lo contrario, devuelve -1

función rebobinar ()

Descripción de la función: poner el indicador de posición del archivo al principio del archivo equivale a restablecer (restablecer) el puntero del archivo

Prototipo de función:void rewind(FILE * fp) ;

Establecer la posición actual (función fseek)

Descripción de la función: reubique curp especificando el número de bytes en relación con la posición inicial, la posición actual o la posición final de la secuencia, según la posición especificada en la función fseek ()

Prototipo de función: int fseek (FILE *fp, long int offset, int origin);
Parámetros:
fp: Puntero de archivo a establecer
desplazamiento:
Origen de desplazamiento : la posición inicial de la búsqueda
Valor de retorno: Ninguno

origen representa la posición inicial de la búsqueda, que tiene los siguientes valores:
SEEK_CUR o 1: la posición del puntero del archivo actual
SEEK_END o 2: el final del archivo
SEEK_SET o 0: el comienzo del archivo

Aplicación integral de fseek y ftell, ejemplos:

int main()
{
    
    
	FILE *fp;
	int nLength = 0;
	fp =fopen(1.txt”,”r+);
	if(fp == NULL)
	{
    
    
		printf(“open failed\n”);
		return -1;
	}
	fseek(fp,0,SEEK_END);//偏移到文件尾部
	nLength = ftell(fp);//获取当前文件指针离文件开头的字节数
	printf(“the file length is %d\n”, nLength);
	fclose(fp);
}

Funciones de entrada y salida de caracteres (fputc () y fgetc ())

1. La función fputc ()

Llamada a int fputc(int ch,FILE *fp) ;
función : función función:
envía el carácter (el valor de ch) al archivo al que apunta fp.
Valor de retorno:
si la salida es exitosa, el valor de retorno es el carácter de salida;
si la salida falla, devuelve un EOF.

2. función fgetc ()

Llamada a función: int fgetc(FILE *fp)
Función función: para
leer un carácter del archivo especificado, el archivo debe abrirse para lectura o lectura.
Valor de retorno:
un carácter se lee correctamente y se asigna al cap. Si se encuentra un carácter de fin de archivo,
se devuelve una marca de fin de archivo EOF.

Operaciones comunes de lectura de caracteres:

① Lee los caracteres de un archivo de texto secuencialmente y muéstralos en la pantalla:

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    
    
	FILE *fp;
	char ch;
    char string[ ] = "This is a test";
	fp = fopen("1.txt","w+");
    fwrite(string, strlen(string), 1, fp);  //将string写入文件
	fseek(fp, 0, SEEK_SET);  //将文件指针设到起始位置
	ch = fgetc(fp);
	while(ch != EOF)
	{
    
    
		 putchar(ch);
		 ch = fgetc(fp);
	} 
	return 0;
}

Nota: EOF no es un personaje sobresaliente, por lo que no se puede mostrar en la pantalla. Dado que el código ASCII de un carácter no puede aparecer -1, es apropiado definir EOF como -1. Cuando el valor del carácter leído es igual a -1, significa que el carácter leído no es un carácter normal sino un carácter de fin de archivo.

② Lee en caracteres secuencialmente desde un archivo binario:

#include<stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    
    
	FILE *fp;
	char ch;
    char string[ ] = "This is a test";
	fp = fopen("1.dat","w+");
    fwrite(string, strlen(string), 1, fp);
	fseek(fp, 0, SEEK_SET);

	while(!feof(fp))  //判断文件不是真的结束,循环
	{
    
    
        ch = fgetc(fp);
		putchar(ch);
	} 
	return 0;
}

Nota: ANSI C proporciona una función feof () para determinar si el archivo realmente ha terminado. Si es el final del archivo, el valor de la función feof (fp) es 1 (verdadero); de lo contrario, es 0 (falso). Lo anterior también se aplica a la lectura de archivos de texto.

función fwrite ()

Descripción de la función: fwrite es una función de escritura sin formato que se utiliza para escribir un bloque completo de datos en un archivo. Una de las aplicaciones más valiosas es leer y escribir tipos de datos definidos por el usuario, especialmente estructuras.

Prototipo de función: size_t fwrite(const void *buffer,size_t bytes, sizeo_t n,FILE *fp);
Parámetros: búfer: la primera dirección de los datos que se escribirán
bytes: el número de bytes ocupados por una unidad
n: cuántas unidades se escriben
fp: el puntero de archivo de la operación
Valor de retorno: el número de unidades escritas es devuelto cuando tiene éxito, de lo contrario devuelve 0

función fread ()

Descripción de la función: fread es una función de lectura sin formato que se utiliza para leer todo el bloque de datos en el archivo. A menudo use la función fwrite para escribir, use la función fread al leer

Prototipo de función: size_t fread(void *buffer, size_t bytes, sizeo_t n, FILE *fp);
Parámetro: búfer: la primera dirección del búfer de recepción
bytes: el número de bytes ocupados por una unidad
n: leer varias unidades
fp: puntero del archivo de operación
Valor de retorno: devuelve el número de unidades leídas si tiene éxito, en caso contrario, devuelve 0

Ejemplos de fread y fwrite:

#include<stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    
    
	FILE *fp;
	char ch;
    char string[1024] = "This is a test";
	char rdata[1024];
	fp = fopen("1.txt","w+");
    fwrite(string, sizeof(string), 1, fp);
	fseek(fp, 0, SEEK_SET);

	fread(rdata,sizeof(rdata),1,fp);  //这里fread的sizeof的大小和fwrite的一直,不然会打印结果后出现乱码或显示不全
	printf("rdata = %s\n",rdata);
	return 0;
}

运行结果:
rdata = This is a test

Formateo de funciones de lectura y escritura (fprintf () y fscanf ())

Llamada de función:
int fscanf(文件指针,格式字符串,输入表列);
int fprintf(文件指针,格式字符串,输出表列);

Función función:
leer o generar caracteres de un archivo de disco.

Ejemplo:

fprintf(fp,"%d,%6.2f",i,t);
fscanf(fp,"%d,%f",&i,&t);

Nota: El uso de las funciones fprintf y fscanf para leer y escribir archivos de disco es fácil de usar y fácil de entender. Sin embargo, dado que el código ASCII se convierte en forma binaria al ingresar y la forma binaria se convierte en caracteres cuando se imprime, se necesita un mucho tiempo. Por lo tanto, en el caso de un intercambio frecuente de datos entre la memoria y el disco, es mejor no utilizar las funciones fprintf y fscanf, sino las funciones fread y fwrite.

putw () y getw ()

Llamada de función:
int putw(int w,FILE * fp);
int getw(FILE * fp);

Función: Leer y escribir una palabra en el archivo de disco (leer enteros del flujo del archivo en forma binaria).

Nota: tanto putw () como getw () son entradas y salidas como binarios. Entonces, si usa putw () para ingresar datos en el archivo y abrirlo como texto, todo lo que verá serán caracteres confusos.
De manera similar, si ingresa un número en un archivo de texto y lo guarda, el resultado de leerlo con getw () no es lo que piensa, porque se lee en binario.

Ejemplos:

#include<stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
    
    
	FILE *fp;
	int w;
	fp = fopen("2.txt","wb");   //以二进制形式写
	putw(5,fp); 
	fclose(fp);
	fp = fopen("2.txt","rb");//以二进制形式读
	w = getw(fp);
	printf("Successful read: w = %d\n", w);
	fclose(fp);
	return 0;
}

función fgets

Función: lee una cadena de caracteres del archivo especificado.

Llamada de función: fgets(str,n,fp);
ingrese n-1 caracteres del archivo al que apunta fp y agregue un '\ 0' al final.
Valor de retorno: la primera dirección de str

función fputs

Función:
Genera una cadena de caracteres en el archivo especificado.
Llamada a función: el fgets("china",fp);
primer parámetro puede ser una constante de cadena, un nombre de matriz de caracteres o un
puntero de carácter . El '\ 0' al final de la cadena no se emite.
Valor de retorno: si la
entrada es exitosa, el valor de retorno es 0; si la
entrada falla, devuelve EOF.

función ferror (detección de errores)

Forma de llamada: ferror(fp);
Valor de retorno: Devuelve 0, indicando que no hay error; Devuelve un valor distinto de cero, indica error

Verifique el valor de la función ferror inmediatamente después de llamar a una función de entrada y salida, de lo contrario se perderá la información. Cuando se ejecuta la función fopen, el valor inicial de la función ferror se establece automáticamente en 0.

función más clara (detección de errores)

Formulario de llamada: clearerr(fp);
Función de función: establezca el indicador de error de archivo y el indicador de fin de archivo en 0.

Mientras haya un indicador de error, permanecerá hasta que se llame a la función clearr o rewind en el mismo archivo o en cualquier otra función de entrada y salida.

Supongo que te gusta

Origin blog.csdn.net/qq_46485161/article/details/115277786
Recomendado
Clasificación