❶ c語言刪除文件中的指定的一行數據怎麼做
你平時應該有這樣的經歷,打開一個.txt格式的小說,在裡面刪除幾個字,系統反應卻很慢,這是為什麼呢?因為文件里的內容都是在硬碟上按順序一個位元組挨著一個位元組擺放的,讀取文件的時候,會從文件首地址一直讀到文件結束標記「-1」。如果能夠直接把文件裡面的幾個位元組刪掉,那麼下次這個文件怎麼讀呢?怎麼區分中間那幾個位元組被刪掉了呢?所以對於這些簡單的文件來說,要想直接刪除裡面的內容是不可能的。
一般有兩個方法實現這個功能:
1.把要保留的內容寫到另一個文件中,要刪掉的內容就不用寫了。
2.把要保留的內容存儲到一個字元串變數中,要刪掉的內容不用存儲,最後把這個字元串再寫回到原文件中覆蓋原來的內容。
常式:
#include<stdio.h>
structdata
{
intbianhao;
charfenlei[10];
charming[12];
intshijian[3];
floatjiage;
}
voiddel(intnum){//定義刪除指定編號的內容的函數
FILE*f1;//操作的文件
longlength;//文件總長度
char*f2;//用於記錄要保存的內容
chars[100];//用於保存每次讀取的一行內容
intn;//用於存儲編號
f1=fopen("data.txt","r");//以讀的方式打開文件
fseek(f1,0,2);//文件指針移到文件尾
length=ftell(f1);//取得文件長度
f2=(char*)malloc(sizeof(char)*length);//給f2分配文件長度的空間
*f2=0;//使得f2字元串的長度初始為0
rewind(f1);//文件指針回到文件頭
while(ftell(f1)<length-3){//當文件沒有結束時就依次讀取文件的每一行
fgets(s,100,f1);//讀取一行信息
n=atoi(s);//從讀取的信息取得編號
if(n==num)continue;//如果編號是要刪除的編號,就不用保存這一行信息了
strcat(f2,s);//保存讀取到的這一行信息
}
fclose(f1);//關閉文件
f1=fopen("data.txt","w");//重新以寫的方式打開文件
fputs(f2,f1);//把保存的信息重新存儲到文件當中
fclose(f1);//關閉文件
}
intmain(){
del(1);//調用上面定義的函數刪除指定編號的內容
del(3);//參數為編號
system("pause");//暫停一下
}
❷ c語言中如何對文件的部分內容刪除
1、建立抄一個.c或者.cpp文件,還要建立一個.txt文件進行操作處理,並且寫上c語言的編譯預處理,頭文件,主函數。
❸ 如何在c語言中清空文件里的內容(很急)
在c語言中清空文件里的內容的代碼:
示例:
#include "
stdio.h"
main()
{FILE *fp;
if(fp=fopen("要清空的件","w+")==NULL)/*以寫的方式打開已經存的文件相當於是答清空。*/
{printf("Error.");
getch();
exit(0);}
fclose(fp);
(3)c語言如何刪除文件中的一條數據擴展閱讀
C語言remove()函數:刪除文件或目錄
clude<stdio.h>
int main(){
charfilename[80];
printf("Thefiletodelete:");
gets(filename);
if(remove(filename)==0)
printf("Removed%s.",filename);
else
perror("remove");
}
❹ c語言怎麼刪除文件中指定數據
用fseek函數定義流指針位置,位置需要自己計算。利用offset。然後再寫入新內容覆蓋舊內容。但這么做有缺陷,新內容必須和就內容一樣長,否則覆蓋不完全或把後面的內容也覆蓋。
所以,我建議直接新建新文件寫入完整的新數據,更簡單。
fseek()用來移動文件流的讀寫位置.
1、參數stream 為已打開的文件指針,
2、參數offset 為根據參數whence 來移動讀寫位置的位移數。參數 whence 為下列其中一種:
SEEK_SET 從距文件開頭offset 位移量為新的讀寫位置. SEEK_CUR 以目前的讀寫位置往後增加offset 個位移量.
SEEK_END 將讀寫位置指向文件尾後再增加offset 個位移量. 當whence 值為SEEK_CUR 或
SEEK_END 時, 參數offset 允許負值的出現.
❺ c語言 如何刪除文件中的一行,求解答!
一個文件內的內容載入到內存之後是連續存儲的。(至少這種小文件,不超過4KB的)
如果想達到刪除一行的效果。至少有三種辦法可以實現
一、最簡單的辦法,建議讀到鏈表裡,刪除其中一個節點。然後再覆蓋寫回到文件。
二、找到要刪除的位置,fseek到該位置,將之後需要保留的文件內容,從這里開始寫。
三、利用內存映射,將文件映射到內存,直接對內存修改,但是對內存修改,也是需要類似於方法2,將需要保留的內容重新移動位置。
綜上,方法一最簡單。
❻ C語言如何刪除文件內容
1、打開Sublime Text軟體,新建一個C語言文件,然後導入C語言庫
❼ C語言中如何刪除文件中的一條記錄
1、刪除文件部分內容的大概步驟:新建一個臨時文件,把原文件內容向臨時文件里拷貝,遇到要刪除的內容就跳過。結束後關閉文件,用remove("原文件名");把原文件刪除,用rename("臨時文件名","原文件名");把臨時文件名改為原文件名。
2、例如在原文件123.txt中刪除以2和以4編號開頭的行,可用以下代碼實現:
#include"stdio.h"
#include"stdlib.h"
intmain(void){
FILE*fin,*ftp;
chara[1000];
fin=fopen("123.txt","r");//讀打開原文件123.txt
ftp=fopen("tmp.txt","w");//寫打開臨時文件tmp.txt
if(fin==NULL||ftp==NULL){
printf("Openthefilefailure... ");
exit(0);
}
while(fgets(a,1000,fin))//從原文件讀取一行
if(a[0]!='2'&&a[0]!='4')//檢驗是要刪除的行嗎?
fputs(a,ftp);//不是則將這一行寫入臨時文件tmp.txt
fclose(fin);
fclose(ftp);
remove("123.txt");//刪除原文件
rename("tmp.txt","123.txt");//將臨時文件名改為原文件名
return0;
}
❽ c語言中清除一行的命令
在 C 語言中,有一種特殊的控制字元叫做退格符 '\b',它可以將游標移動回前一個位置從而覆蓋前面的字元。因此,可以使用循環列印退格賣帆符來清除一行的內容。以下是一個示例代碼:
Copy code
// 輸出一行文本
printf("abcdef");
printf("123321456789");
// 使用退格符清除 123321456789
for (int i = 0; i < 12; i++) {
printf("\b \b");
}
輸出結果為:
Copy code
abcdef /中寬雹/ 123321456789 已被清除掉,abcdef 保留了下來
在上述代碼中,我們先列印了兩行文本,然後使用循環列印了 12 個退格符,這樣就將前一行的內容全部清除掉了。需要注意的是,退格符只能將游標向前移動一個位置,因此需要列印足夠多的退格符才能將整行內容全部巧碧清除。
❾ C語言如何刪除文件中的數據
刪除文件中的數據,比較麻煩,容易出錯,比如刪除某個記錄(比如你定義的這個結構的一個實例數棗消據),後面的記錄都要向前面移動。
普通做法是另開個文件,將數據按照刪除後的順序重新寫一遍,然後刪除原文件,新文件改名成原文件名
如果數據文件較大,一般是在文件頭上建立各記含老錄的索引,並且記錄該記錄是凳老知否被刪除,這樣也無效倒騰其他數據了。
❿ C語言如何刪除文件內容
1、打開Sublime Text軟體,新建一個C語言文件,然後導入C語言庫