Ler e escrever notas de arquivo TXT 2

A última nota escreveu sobre a função fopen e a função fclose.Nesta nota, escrevemos a função fgetc_fputc, a função fgets_fputs e a função fread_fwrite.

1. Leia e escreva um caractere de cada vez

Declaração de função:

int fgetc(FILE *stream);

Descrição da função:

fgetc lê um byte do arquivo identificado por stream e retorna o valor do byte.

valor de retorno:

Na forma de t: leia o final do arquivo e retorne EOF (EOF é uma constante simbólica definida no arquivo stdio.h, o valor é -1)

No caminho de b: leia o final do arquivo, use feof (ponteiro de arquivo) para julgar o final

feof é uma função de biblioteca padrão da linguagem C. Seu protótipo está em stdio.h. Sua função é detectar o fim do arquivo no fluxo. Se o arquivo terminar, ele retornará um valor diferente de zero, caso contrário, retornará 0.

Declaração de função:

int fputc(int c,FILE *stream)

Descrição da função:

fputc grava o valor de c no arquivo representado por stream.

valor de retorno:

Se a saída for bem-sucedida, retorne o valor do byte da saída

Retorna um EOF se a saída falhar

※※Nota: Ao abrir um arquivo, a posição de leitura e gravação padrão é no início do arquivo. Se a posição de leitura e gravação for aberta na forma de um no final do arquivo, a posição de leitura e gravação será para o arquivo ao ler ou gravar bytes no arquivo. O deslocamento final, quantos bytes ler, quantos bytes a posição de leitura e gravação é deslocada para o final do arquivo.

exemplo:

#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;
}

Conteúdo no arquivo test.txt:

 O arquivo test2.txt era originalmente um arquivo vazio. Após executar o programa acima, o conteúdo do arquivo test2.txt:                                        

 Nota: Se não houver um arquivo test2.txt, um arquivo test2.txt vazio será criado primeiro.

Segundo, leia e escreva uma string de cada vez

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

Leia os caracteres do arquivo identificado pelo fluxo e pare de ler quando uma nova linha for encontrada ou o final do arquivo for encontrado, ou bytes de tamanho 1 são lidos para parar a leitura e o conteúdo é lido. Um '\0' será adicionado depois dele como o final da string.

valor de retorno:

Retorna com sucesso o primeiro endereço da matriz, ou seja, s.

Retorna NULL em caso de falha.

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

Função função:

Grava a string apontada por s no arquivo representado por stream.

valor de retorno:

Retorna o número de bytes gravados com sucesso.

Retorna -1 em caso de falha.

exemplo:

#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;
}

Conteúdo no arquivo test.txt:

 O conteúdo do arquivo dest.txt após a execução do programa acima:

 Se o 6 em fgets(str,6,fp_read) for alterado para 16, o conteúdo no arquivo dest.txt: ​​​​​​​​​​​​​​​​​​​​​​​

 A razão pela qual eu só leio dez caracteres é porque há uma nova linha depois de helloworld.

Terceiro, leia o arquivo fread

Declaração de função:

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

Descrição da função:

A função fread lê os dados do arquivo identificado por stream, cada bloco tem bytes de tamanho, um total de blocos nmemb, e é armazenado na memória apontada por ptrh.

Valor de retorno: O número real de blocos lidos.

exemplo:

unsigned int num;

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

O conteúdo lido do arquivo representado por fp é armazenado na memória apontada por str, e o número de bytes lidos é de 100 bytes por bloco, 3 blocos. Valor de retorno num:

Se 300 bytes são lidos, o valor de retorno é 3

Se o número de bytes lidos for maior ou igual a 200 e menor que 300, o valor de retorno será 2

Se o número de bytes lidos for maior ou igual a 100 e menor que 200, o valor de retorno será 1

Retorna 0 para menos de 100 bytes.

Quarto, escreva o arquivo fwrite

Declaração de função:

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

Descrição da função:

A função fwrite grava os dados na memória apontada por ptr para o arquivo identificado por stream, um bloco é bytes de tamanho e um total de blocos nmemb.

Valor de retorno: O número real de blocos gravados.

exemplo:

#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;
}

※※Perceber:

A função fwrite é a saída dos dados na memória para o arquivo como está.

A função fread lê os dados do arquivo na memória como estão. (ler byte a byte)

Cinco, leitura e escrita aleatória

Funções para completar o posicionamento do arquivo: retroceder, funções fseek

1. rebobinar redefinir a posição de leitura e gravação

função de retrocesso:  void retroceder (ponteiro de arquivo);

Função: move o ponteiro de posição interna do arquivo para o início do arquivo

Formulário de chamada: rewind(ponteiro de arquivo);

exemplo:

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

rebobinar(fp);

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

2. ftell mede o número de bytes desde o início do arquivo até a posição de leitura e gravação do arquivo

Definir função: long ftell(ponteiro de arquivo);

Função: Obtém a posição atual de leitura e gravação do fluxo de arquivos

Valor de retorno: Retorna a posição atual de leitura/gravação (o número de bytes desde o início do arquivo), ou -1 em caso de erro.

exemplo:

comprimento int longo;

comprimento =ftell(fp);

3.fseek ponteiro de posição de posicionamento (posição de leitura e gravação)

função fseek (geralmente usada para arquivos binários, ou seja, a maneira de abrir arquivos requer b)

Declaração de função:

int fseek(FILE *stream,long offset,int de onde);

int fseek(ponteiro de tipo de arquivo, deslocamento, ponto inicial);

O deslocamento é um número positivo para deslocamento até o final do arquivo e um número negativo para deslocamento para o início do arquivo.

Função: Mova a posição de leitura e gravação do fluxo de arquivos.

posição inicial de onde

início do arquivo SEEK_SET 0
local atual do arquivo SEEK_CUR 1
fim do arquivo SEEK_END 2

Acho que você gosta

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