Leer y escribir notas de archivos TXT 2

La última nota escribió sobre la función fopen y la función fclose En esta nota, escribimos la función fgetc_fputc, la función fgets_fputs y la función fread_fwrite.

1. Lee y escribe un carácter a la vez

Declaración de función:

int fgetc(ARCHIVO *flujo);

Función descriptiva:

fgetc lee un byte del archivo identificado por flujo y devuelve el valor del byte.

valor de retorno:

En el camino de t: leer el final del archivo y devolver EOF (EOF es una constante simbólica definida en el archivo stdio.h, el valor es -1)

En el camino de b: lea el final del archivo, use feof (puntero de archivo) para juzgar el final

feof es una función de biblioteca estándar del lenguaje C. Su prototipo está en stdio.h. Su función es detectar el final del archivo en la secuencia. Si el archivo finaliza, devuelve un valor distinto de cero, de lo contrario, devuelve 0.

Declaración de función:

int fputc(int c,ARCHIVO *flujo)

Descripción de la función:

fputc escribe el valor de c en el archivo representado por stream.

valor de retorno:

Si la salida es exitosa, devuelve el valor de byte de la salida

Devuelve un EOF si la salida falla

※※Nota: Al abrir un archivo, la posición predeterminada de lectura y escritura es al principio del archivo. Si la posición de lectura y escritura se abre en forma de al final del archivo, la posición de lectura y escritura irá al archivo al leer o escribir bytes en el archivo El desplazamiento final, cuántos bytes leer, cuántos bytes se desplaza la posición de lectura y escritura hasta el final del archivo.

ejemplo:

#include<stdio.h>

int main()
{
	FILE *fp1,*fp2;
	char ch;
	fp1=fopen("test.txt","r");
	if(fp1==NULL)
	{
		perror("fopen");
		return 0;
	}
	fp2=fopen("test2.txt","w");
	if(fp2==NULL)
	{
		perror("fopen");
		return 0;
	}
	while((ch=fgetc(fp1))!=EOF)
	{
		fputc(ch,stdout);	
		fputc(ch,fp2);
	}
	fclose(fp1);
	fclose(fp2);
	return 0;
}

Contenido en el archivo test.txt:

 El archivo test2.txt originalmente era un archivo vacío.Después de ejecutar el programa anterior, el contenido del archivo test2.txt:                                        

 Nota: Si no hay un archivo test2.txt, primero se creará un archivo test2.txt vacío.

Segundo, lea y escriba una cadena a la vez

char *fgets(char *s,int size,FILE *stream);

Lea los caracteres del archivo identificado por secuencia y deje de leer cuando se encuentre una nueva línea o se encuentre el final del archivo, o se lean bytes de tamaño 1 para detener la lectura y se lea el contenido. añadido después de él como el final de la cadena.

valor de retorno:

Devuelve con éxito la primera dirección de la matriz, es decir, s.

Devuelve NULL en caso de error.

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

función función:

Escribe la cadena a la que apunta s en el archivo representado por stream.

valor de retorno:

Devuelve el número de bytes escritos en caso de éxito.

Devuelve -1 en caso de error.

ejemplo:

#include<stdio.h>

int main()
{
	FILE* fp_read,*fp_write;
	char str[100];
	fp_read=fopen("test.txt","r");
	if(fp_read==NULL)
	{
		perror("fopen");
		return 0;
	}
	fp_write=fopen("dest.txt","w");
	if(fp_write==NULL)
	{
		perror("fopen");
		return 0;
	}
	fgets(str,6,fp_read);
	printf("str=%s\n",str);
	fputs(str,fp_write);
	return 0;
}

Contenido en el archivo test.txt:

 El contenido del archivo dest.txt después de ejecutar el programa anterior:

 Si el 6 en fgets(str,6,fp_read) se cambia a 16, el contenido en el archivo dest.txt:

 La razón por la que solo leo diez caracteres es porque hay una nueva línea después de helloworld.

Tercero, lea el archivo fread

Declaración de función:

size_t_fread(void *ptr,size_t size,size_t nmemb,FILE *stream);

Descripción de la función:

La función fread lee datos del archivo identificado por flujo, cada bloque tiene un tamaño de bytes, un total de bloques nmemb, y se almacena en la memoria a la que apunta ptrh.

Valor devuelto: el número real de bloques leídos.

ejemplo:

número entero sin signo;

num=pread(str,100,3,fp);

El contenido leído del archivo representado por fp se almacena en la memoria a la que apunta str, y el número de bytes leídos es de 100 bytes por bloque, 3 bloques. Número de valor de retorno:

Si se leen 300 bytes, el valor devuelto es 3

Si el número de bytes leídos es mayor o igual a 200 y menor a 300, el valor devuelto es 2

Si el número de bytes leídos es mayor o igual a 100 y menor a 200, el valor devuelto es 1

Devuelve 0 para menos de 100 bytes.

Cuarto, escriba el archivo fwrite

Declaración de función:

size_t fwrite(void *ptr,size_t size,size_t nmemb,FILE *stream);

Descripción de la función:

La función fwrite escribe los datos en la memoria a la que apunta ptr en el archivo identificado por flujo, un bloque es bytes de tamaño y un total de bloques nmemb.

Valor devuelto: el número real de bloques escritos.

ejemplo:

#include<stdio.h>

struct stu
{
	char name[10];
	int num;
	int age;
 }stu1[2],stu2[2];
int main()
{
	FILE *fp;
	int i;
	fp=fopen("student.txt","wb+");//把文件当作二进制文件打开
	if(fp==NULL)
	{
		perror("fopen");
		return 0;
	}
	for(i=0;i<2;i++)
	{
		scanf("%s %d %d",stu1[i].name,&(stu1[i].num),&(stu1[i].age));
	}
	fwrite(stu1,sizeof(struct stu),2,fp); //将学生信息写入文件中
	rewind(fp); //文件指针经过写操作已经到了最后,需要复位
	fread(stu2,sizeof(struct stu),2,fp); //将文件中的数据读入内存中
	printf("%s %d %d\n",stu2[0].name,stu2[0].num,stu2[0].age);
	printf("%s %d %d\n",stu2[1].name,stu2[1].num,stu2[1].age);
	return 0;
}

※※Darse cuenta:

La función fwrite es para enviar los datos en la memoria al archivo tal como están.

La función fread lee los datos del archivo en la memoria tal como están. (leer byte a byte)

Cinco, lectura y escritura aleatorias

Funciones para completar el posicionamiento de archivos: rebobinado, funciones fseek

1. rebobinar restablecer la posición de lectura y escritura

función de rebobinado:  rebobinado vacío (puntero de archivo);

Función: mueve el puntero de posición interno del archivo al principio del archivo

Formulario de llamada: rebobinar (puntero de archivo);

ejemplo:

fwrite(pa,sizeof(struct stu),2,fp);

rebobinar (fp);

fread(pb,sizeof(struct stu),fp);

2. ftell mide el número de bytes desde el principio del archivo hasta la posición de lectura y escritura del archivo

Definir función: long ftell (puntero de archivo);

Función: Obtener la posición actual de lectura y escritura del flujo de archivos

Valor devuelto: Devuelve la posición de lectura/escritura actual (el número de bytes desde el principio del archivo), o -1 en caso de error.

ejemplo:

largo int longitud;

longitud =ftell(fp);

Puntero de posición de posicionamiento 3.fseek (posición de lectura y escritura)

función fseek (usada generalmente para archivos binarios, es decir, la forma de abrir archivos requiere b)

Declaración de función:

int fseek(ARCHIVO *stream,long offset,int de dónde);

int fseek (puntero de tipo de archivo, desplazamiento, punto de inicio);

El desplazamiento es un número positivo para desplazar hasta el final del archivo y un número negativo para desplazar hasta el principio del archivo.

Función: Mueve la posición de lectura y escritura del flujo de archivos.

de donde posición inicial

inicio de archivo BUSCAR_ESTABLECER 0
ubicación actual del archivo SEEK_CUR 1
fin del documento SEEK_END 2

Supongo que te gusta

Origin blog.csdn.net/qq_61139806/article/details/124056466
Recomendado
Clasificación