當前位置:成語大全網 - 書法字典 - 如何用C語言刪除文件中指定的壹行數據?

如何用C語言刪除文件中指定的壹行數據?

妳應該有在打開壹本小說的經歷。txt格式並刪除了其中的幾個字,但是系統反應很慢。為什麽?因為文件的內容是按順序壹個字節壹個字節地放在硬盤上的,所以在讀取文件時,會從文件的第壹個地址開始讀取結束標記“-1”。如果可以直接從文件中刪除幾個字節,下次怎麽讀取這個文件?如何判斷中間字節是否被刪除?所以對於這些簡單的文件,是不可能直接刪除內容的。

通常有兩種方法來實現這壹功能:

1.想保留的寫在另壹個文件裏,想刪除的不要寫。

2.將要保存的內容存儲在字符串變量中,要刪除的內容不需要存儲。最後,將這個字符串寫回原始文件以覆蓋原始內容。

常規:

# include & ltstdio.h & gt

struct?數據

{

int?邊浩;

夏爾?芬雷[10];

夏爾?明[12];

int?石堅[3];

浮動?嘉格;

}

作廢?del(int?Num){//定義函數刪除指定編號的內容?

文件?* f 1;//文件進行操作?

龍?長度;//文件總長度?

夏爾?* f2//用來記錄要保存的內容?

夏爾?s[100];//用來保存每次讀取的壹行內容?

int?n;//用來存儲號碼?

f1=fopen("data.txt "," r ");//以已讀方式打開文件?

fseek(f1,0,2);//文件指針移動到文件末尾?

長度= ftell(f 1);//獲取文件長度?

f2=(char?*)malloc(sizeof(char)* length);//分配文件長度的空間給f2?

* F2 = 0;//使f2字符串的長度初始為0?

倒帶(f 1);//文件指針返回文件頭?

while(ftell(f 1)& lt;Length-3){//文件沒讀完就依次讀文件的每壹行?

fgets(s,100,f 1);//讀取壹行信息?

n = atoi(s);//從讀取的信息中獲取號碼?

if(n==num)?繼續;//如果要刪除號碼,不需要保存這行信息?

strcat(f2,s);//保存已讀行信息?

}

fclose(f 1);//關閉文件?

f1=fopen("data.txt "," w ");//通過寫入重新打開文件?

fputs(f2,f 1);//將保存的信息恢復到文件中?

fclose(f 1);//關閉文件?

}

int?main(){

del(1);?//調用上面定義的函數刪除指定編號的內容?

德爾(3);?//參數是數字?

系統(“暫停”);//暫停?

}