[Linguagem C] Operação de arquivo "1"

  Página pessoal: Bem-vindos a todos --> Populus euphratica sob o deserto

 Gente, vocês são tão lindos

 Se você achar o artigo útil

 Você pode apoiar blogueiros com um clique

 Cada grama de sua preocupação é a força motriz para eu perseverar

 

 ☄: Foco desta edição: Conhecimento sobre operações de arquivos

  Espero que todos tenham um bom estudo e trabalho todos os dias. 

O que é um arquivo? Por que ter documentos? Qual é o nome do arquivo?

Os arquivos no disco são arquivos, mas em programação, geralmente falamos de dois tipos de arquivos: arquivos de programa e arquivos de dados (classificados sob a perspectiva das funções dos arquivos).
arquivos de Programas:
Incluindo arquivos de programa de origem (com sufixo .c ) , arquivos de objeto ( com sufixo .obj no ambiente Windows ) , programas executáveis ​​( com sufixo .exe no ambiente Windows ).
arquivo de dados:
O conteúdo do arquivo não é necessariamente o programa, mas os dados lidos e gravados quando o programa é executado, como o arquivo do qual o programa precisa ler os dados ou o arquivo do qual o conteúdo é gerado.
Isso é chamado de arquivo.
Nossos métodos gerais de persistência de dados incluem armazenamento de dados em arquivos de disco, armazenamento de dados em bancos de dados e assim por diante. Usando arquivos, podemos armazenar dados diretamente no disco rígido do computador, o que torna os dados persistentes, razão pela qual usamos arquivos.
Um arquivo deve ter um identificador de arquivo único para identificação e referência do usuário.O identificador de arquivo consiste em três partes: caminho do arquivo + nome do arquivo tronco + sufixo do arquivo, geralmente também chamamos o identificador do arquivo de nome do arquivo.

 O conceito de fluxo:

Um fluxo é um canal formado entre um sistema e um programa. Os dois são um relacionamento um-para-um, e o fluxo expressa a capacidade de interagir entre os dois. O chamado "sistema de tempo de execução do programa ANSI C deve fornecer três fluxos, stdin, stdout, stderr", ou seja, o sistema deve fornecer esses três "canais" , a saber

1, o canal stdin entre o programa e a entrada padrão (teclado padrão)

2, o canal stdout entre o programa e a saída padrão (exibição padrão)

3, o canal stderr entre o programa e o terminal (o padrão também é o display)

Há também o fluxo de arquivos no qual queremos nos concentrar hoje, usando o ponteiro FILE* para apontar para a memória para operações subsequentes.

abertura e fechamento de arquivo

O arquivo deve ser aberto antes da leitura e escrita, e deve ser fechado após o término do uso . Ao escrever um programa, ao abrir um arquivo, ele retornará uma variável ponteiro FILE* para apontar para o arquivo, o que também equivale a estabelecer uma relação de ponteiro e arquivo. ANSIC estipula que a função fopen é usada para abrir o arquivo e fclose para fechar o arquivo.

  A frente de fopen é o nome do arquivo, e algumas strings específicas são necessárias depois dele, e fclose só precisa fechar a variável de ponteiro de arquivo.

operações de leitura e gravação de arquivos

Não basta apenas saber abrir e fechar arquivos, devemos também saber ler e escrever arquivos.

O acima é a função de operação de arquivo comumente usada

Aqui está o que realmente fazemos:

Escreva os números 0~9 no arquivo:

int main()
{
	FILE *p = fopen("胡杨.dat", "w");
	if (NULL == p)
	{
		perror("main:");
		exit(-1);
	}

	for (char i = '0'; i <= '9'; i++)
	{
		fputc(i,p);
	}

	fclose(p);
	p = NULL;
	return 0;
}

 

A forma de gravação "w" é usada para abrir o arquivo, a função fputs é usada para escrever caracteres e, em seguida, um loop é usado para inserir cada caractere de 0 a 9 no arquivo.

 Leia o conteúdo do arquivo

int main()
{
	FILE *p = fopen("胡杨.dat", "r");
	if (NULL == p)
	{
		perror("main:");
		exit(-1);
	}

	char a[15] = { 0 };

	fgets(a, 11, p);

	puts(a);

	fclose(p);
	p = NULL;
	return 0;
}

 Aqui está uma pequena pergunta, por que 11 é usado na função fgets? São 10 números no total, 11 vezes para ler?

Porque a cópia padrão de '\0' é copiar o final da string, que pode ser vista através da depuração.

 Pode-se ver que se forem copiadas 10 cópias, então apenas 8 serão copiadas e paradas, ou seja, a última copiará '\0' por padrão

Portanto, ao usar fgets, há um elemento a mais do que a cópia real, ou seja, se você deseja copiar 10 elementos, 11 devem ser escritos em fgets.

ler e escrever em binário

Queremos escrever algum arquivo confidencial no arquivo, podemos escrever em binário no arquivo.

Tomemos a estrutura como exemplo para facilitar a observação:

typedef struct stu
{
	char name[20];
	int age;
	int ID[10];
}stu;

int main()
{
	FILE *p = fopen("树下.dat", "wb");
	if (NULL == p)
	{
		perror("main:");
		exit(-1);
	}
	
	stu s1 = { "胡杨树下", 18, { 1, 2, 3, 4, 5, 6, 7, 8, 9 } };

	fwrite(&s1, sizeof(s1), 1, p);
	

	fclose(p);
	return 0;
}

 Escritas binárias, não entendemos, mas os arquivos sabem .

Vamos abrir com binário .

int main()
{
	FILE *p = fopen("树下.dat", "rb");
	if (NULL == p)
	{
		perror("main:");
		exit(-1);
	}

	stu s2 = { 0 };

	fread(&s2, sizeof(s2), 1, p);

	fclose(p);
	return 0;
}

 Isso pode ser passado, o binário é lido e o arquivo é lembrado.

Precauções

1. Em primeiro lugar, quando precisamos conhecer um arquivo para operar, devemos primeiro considerar o método de abertura , se é somente leitura ou somente escrita ou outros métodos.

2. Determine se o arquivo foi aberto com sucesso .

3. Para julgar como escrever no arquivo, seja para entrada uma a uma, linha por linha ou saída, as funções usadas são diferentes.

4. No final você deseja fechar o arquivo .

Próximo aviso:

A próxima edição explicará o conhecimento da série de arquivos.

Maravilhosa próxima edição~! ~! ~!

 

 

Acho que você gosta

Origin blog.csdn.net/m0_64770095/article/details/124341622
Recomendado
Clasificación