Resumen de aprendizaje del lenguaje C _10 operación de archivos

Varios puntos de conocimiento resumidos esta vez
1. Por qué usar un archivo
2. Qué es un archivo
3. Abrir y cerrar el
archivo 4. La lectura y escritura secuencial
del archivo 5. La lectura y escritura aleatoria
del archivo 6. La clasificación
de el archivo 7. El final del archivo leyendo Sentencia
8, búfer de archivo


1. ¿Por qué utilizar archivos?
Cuando usamos c para escribir una pequeña aplicación de la libreta de direcciones, cuando el programa de la libreta de direcciones sale, los datos que contiene no existen. La próxima vez que se ejecute el programa, será necesario volver a introducirlo. ¿No es incómodo? ¿No se pueden colocar los datos en un lugar donde se puedan almacenar permanentemente? Esto implica el problema de la persistencia de los datos, como almacenar datos en discos o bases de datos.
Usando archivos, podemos poner los datos directamente en el disco duro de la computadora para lograr la persistencia de los datos.
2. ¿Qué es un archivo?
Archivo = Contenido + Atributos
En el diseño del programa, se divide en: archivos de programa y archivos de datos
2.1, archivos de programa Los archivos de
programa terminan en .c, terminan en .obj y terminan en .exe.
2.2. Archivo de datos
El contenido del archivo no es necesariamente el programa, sino los datos leídos y escritos cuando el programa se está ejecutando, como el archivo que necesita leer los datos cuando el programa se está ejecutando, o el archivo que genera el contenido. .
2.3 Nombre de
archivo Un archivo debe tener un identificador de archivo único para que los usuarios lo identifiquen y citen.
El nombre de archivo consta de 3 partes: ruta de archivo + tronco de nombre de archivo + sufijo de archivo
3. Apertura y cierre de
archivo 3.1 Puntero de archivo
Cada archivo utilizado ha abierto un área de información de archivo correspondiente en la memoria para almacenar la información de archivo relacionada (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 es declarado por el sistema, llamado FILE.
Por ejemplo, el FILE* pf;
la definición de pf es una variable de puntero (puntero de estructura) para datos de tipo FILE. Se puede acceder al archivo a través de la información del área de información del archivo. En otras palabras, el archivo asociado con él se puede encontrar a través de la variable de puntero de archivo.
Archivo = contenido del archivo + atributos del archivo
3.2
El archivo debe abrirse antes de leer y escribir, y el archivo debe cerrarse después de su uso.
Al escribir un programa, cuando se abre el archivo, se devolverá una variable de puntero de FILE * para apuntar al archivo, lo que equivale a establecer la relación entre el puntero y el archivo.
Use fopen para abrir el archivo, fclose para cerrar el archivo
Inserte la descripción de la imagen aquí

int main()
{
    
    
	FILE* pf = fopen("myfile.txt", "a");
	if (pf == NULL)
	{
    
    
		printf("File open error!\n");
		system("pause");
		return 1;
	}
	else{
    
    
		fputs("不是个梦!", pf);
		fclose(pf);
	}
	system("pause");
	return 0;
}

El primer parámetro formal es el nombre del archivo y el segundo es el modo abierto. Consulte http://www.cplusplus.com/reference/cstdio/fopen/?kw=fopen.
4. Secuencia de archivo de lectura y escritura de
entrada de caracteres y funciones de salida: Fgetc / fputc funciones
de entrada y salida de línea de texto: fgets / fputs
funciones de entrada y salida formateadas: fscanf / fprintf
entrada y salida binaria: fread / fwrite
podemos usar fprintf para simular printf el
lenguaje c abrirá 3 entradas y salidas estándar streams por defecto, y sus tipos también son Para FILE * respectivamente:
stdin -------> entrada estándar
stdout -----> display
stderr ------> display
Todo es un archivo.

int main()
{
    
    
	fprintf(stdout, "chenzhihao is %s\n", "xiao ke ai!");
	system("pause");
	return 0;
}

5. Lectura y escritura aleatoria (posición) del
archivo fseek: ubique el puntero del archivo de acuerdo con la posición y el desplazamiento del archivo
ftell: devuelve el desplazamiento del archivo en relación con la posición inicial
rebobinado: deje que el archivo lea y escriba la posición de retorno al principio del archivo Posición inicial.
Para obtener más información, consulte lo siguiente:
http://www.cplusplus.com/reference/cstdio/fseek/?kw=fseek
6. Clasificación de archivos
Según la forma de organización de los datos, los archivos de datos se convierten en archivos de texto o archivos binarios.
Los datos se almacenan en la memoria en forma binaria, si se envían a la memoria externa sin conversión, es un archivo binario.
Si es necesario almacenarlo en forma de código ASCII en la memoria externa, debe convertirse antes de la escuela del pueblo. Un archivo almacenado en forma de código ASCII es un archivo de texto.
7. Juicio del final de la lectura del archivo. Recuerde
que feof se usó incorrectamente
: En el proceso de lectura del archivo, el valor de retorno de la función feof no se puede usar directamente para juzgar si el archivo ha terminado, pero se aplica cuando el archivo finaliza la lectura Se juzga si el final de la lectura falla o si se encuentra el final del archivo.
1) Si la lectura del archivo de texto ha finalizado, juzgue si el valor de retorno es EOF (fgetc) o NULL (fgets)
, es decir:
fetc juzga si es EOF
fgets juzga si el valor de retorno es NULL
2)
Si el archivo binario Se juzga la lectura finalizada: Determine si el valor devuelto u es menor que el número que se va a leer.
fread determina si el valor devuelto es menor que el número real a leer.
El código del archivo de texto es el siguiente:

int main()
{
    
    
	FILE* pf;
	int n = 0;
    pf = fopen("czh.txt", "r");
	if (NULL == pf){
    
    
		puts("File Open error!");
	}
	else{
    
    
		while (fgetc(pf) != EOF){
    
    
			n++;
		}
		//程序走到这里证明跳出循环,也就是文件读取结束,然后要feof判断
		//读取结束的原因
		if (feof(pf)){
    
    
			printf("文件总字符数为:%d\n", n);
		}
		else{
    
    
			puts("End of file is not reached!");
		}
		fclose(pf);
	}


	system("pause");
	return 0;
}

Ejemplos de archivos binarios:

#define SIZE 10
int main()
{
    
    
	//二进制文件文件的读写
	double a[SIZE] = {
    
     3.10, 3.11, 3.12, 3.13, 3.14, 3.15, 3.16, 3.17, 3.18, 3.19 };
	FILE* pf = fopen("data.txt", "wb");
	if (pf == NULL){
    
    
		puts("File open error!");
	}
	else{
    
    
		fwrite(a, sizeof(double), SIZE, pf);
		fclose(pf);
	}
	pf = fopen("data.txt", "rb");
	if (pf == NULL){
    
    
		puts("File open error!");
	}
	else{
    
    
		double b[3] = {
    
     0.0 };//缓冲区
		while (1){
    
    
		   size_t s=fread(b, sizeof(double), 3, pf);
		   if (s < 3){
    
    
			   break;
		   }
		   //对读到的元素进行操作
		}
		if (feof(pf)){
    
    
			puts("read file of end....!");
		}
		/*while (fread(b, sizeof(double), 3, pf)>0)
		{
			for (int i = 0; i < 3; i++){
				printf("%f\n", b[i]);
			}
		}*/
		fclose(pf);
	}
	system("pause");
	return 0;
}

o:

int main()
{
    
    
	//二进制文件文件的读写
	double a[SIZE] = {
    
     3.10, 3.11, 3.12, 3.13, 3.14, 3.15, 3.16, 3.17, 3.18, 3.19 };
	FILE* pf = fopen("data.txt", "wb+");
	if (pf == NULL)
	{
    
    
		puts("File open error!");
	}
	else
	{
    
    
		fwrite(a, sizeof(double), SIZE, pf);
		//int pos_0 = ftell(pf);
		//printf("pos_0 = %d\n", pos_0);
		rewind(pf);//让文件读取位置回到其实位置,避免重新关闭和打开
		//int pos_1  = ftell(pf);
		//printf("pos_1 = %d\n", pos_1);
		double b[3] = {
    
     0.0 };//读缓冲区
		while (1)
		{
    
    
			size_t s = fread(b, sizeof(double), 3, pf);
			if (s < 3)
			{
    
    
				break;
			}
		}
		if (feof(pf))
		{
    
    
			puts("End of file is reached!\n");
		}
		else
		{
    
    
			puts("file read error!");
		}
		fclose(pf);
	}
	
	system("pause");
	return 0;
}

8. El programa file buffer
c proporciona un mecanismo de búfer por defecto. El llamado mecanismo de búfer es un búfer. El búfer es esencialmente una pieza de memoria. Su valor de existencia es mejorar la eficiencia. Se puede entender como entrega urgente.
Los mecanismos comunes de almacenamiento en búfer son: 1) Sin almacenamiento en búfer 2) Almacenamiento en búfer de línea 3) Almacenamiento en búfer completo Almacenamiento en búfer de
línea: utilice símbolos especiales como una marca de actualización del búfer como "\ n",
almacenamiento en búfer completo: actualice el búfer cuando el búfer esté lleno, actualización forzada, El programa se cierra.
Los archivos de visualización están almacenados en línea y sin búfer,
los archivos normales están completamente almacenados

Supongo que te gusta

Origin blog.csdn.net/CZHLNN/article/details/110238501
Recomendado
Clasificación