Red de conocimiento informático - Computadora portátil - Cómo eliminar una línea de datos específica en un archivo en lenguaje C

Cómo eliminar una línea de datos específica en un archivo en lenguaje C

Deberías haber tenido esta experiencia en momentos normales. Cuando abres una novela en formato .txt y eliminas algunas palabras, el sistema responde muy lentamente. Debido a que el contenido del archivo se coloca byte a byte en orden en el disco duro, al leer el archivo, la marca de final del archivo "-1" se leerá desde la primera dirección del archivo. Si puede eliminar directamente algunos bytes del archivo, ¿cómo leerá el archivo la próxima vez? ¿Cómo distinguir qué bytes del medio se han eliminado? Entonces, para estos archivos simples, es imposible eliminar directamente el contenido.

Generalmente existen dos métodos para lograr esta función:

1. Escriba el contenido que se va a conservar en otro archivo y no es necesario escribir el contenido que se va a eliminar.

2. Almacene el contenido que se conservará en una variable de cadena. No es necesario almacenar el contenido que se eliminará. Finalmente, vuelva a escribir la cadena en el archivo original para sobrescribir el contenido original.

Rutina: #include

struct?data

{

int?bianhao;

char?fenlei[10];

char?ming[12];

int?shijian[3];

flotador?jiage;

p>

}

void?del(int?num){//¿Definir una función para eliminar el contenido del número especificado?

FILE?*f1;// ¿Operación Archivo?

long?length;//¿Longitud total del archivo?

char?*f2;//¿Se utiliza para registrar el contenido que se guardará?

char? s[100];//¿Se usa para guardar una línea de contenido cada vez que se lee?

int?n;//¿Se usa para almacenar el número?

f1=fopen ("data. txt","r");//¿Abrir el archivo para leerlo?

fseek(f1,0,2);//¿Mover el puntero del archivo al final del archivo?

length =ftell(f1);//¿Obtener la longitud del archivo?

f2=(char?*)malloc(sizeof(char)*length);//Asignar espacio para el ¿longitud del archivo a f2?

*f2=0;//¿Hacer que la longitud de la cadena f2 sea inicialmente 0?

rewind(f1);//El puntero del archivo vuelve al principio del archivo?

while( ftell(f1)

fgets( s,100,f1);//¿Leer una línea de información?

n=atoi(s);//¿Obtener el número de la información leída?

if(n= =num)?continue;//Si el número es el número que se va a eliminar, ¿no es necesario guardar esta línea de información?

strcat(f2,s);//Guardar la línea leída de información?

}

fclose( f1);//¿Cerrar el archivo?

f1=fopen("data.txt","w") ;//¿Reabrir el archivo para escribir?

fputs(f2,f1);//¿Restaurar la información guardada en el archivo?

fclose(f1);//Cerrar el archivo ?

}

int? main(){

del(1);?//Llame a la función definida anteriormente para eliminar el contenido del número especificado ?

del(3);?//¿El parámetro es un número?

system("pause");//¿Pausa?

}