當前位置:首頁 » 編程語言 » c語言刪除文件一行
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言刪除文件一行

發布時間: 2022-04-16 15:36:14

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語言實現文件內容某行刪除

整體思路如下:
首先,找到找到要刪除的那一行的行號,假如是j行,然後把指向文件的指針定位到j+1行處(可以使用fseek函數,Linux下可以使用lseek函數);
讀取一行(此時的文件指針已到達改行的末尾處,也可以認為是到了下一行的開始處),再把文件指針定位到j行,把剛才讀出的再寫會,使用循環直至文件結束。
簡單的說就是把後面的每一行一行一行的讀出,再一行一行的寫到前面一行。

㈢ 如何用c語言實現刪除文件中指定的數據;例如

1、首先我們輸入【deleteScore】函數,先看整體代碼,再一一解釋。

注意事項:

C語言提供了許多低級處理的功能,並仍然保持著跨平台的特性,以一個標准規格寫出的C語言程序可在包括類似嵌入式處理器以及超級計算機等作業平台的許多計算機平台上進行編譯。

㈣ c語言刪除文件中的指定的一行數據怎麼做

  1. 你平時應該有這樣的經歷,打開一個.txt格式的小說,在裡面刪除幾個字,系統反應卻很慢,這是為什麼呢?因為文件里的內容都是在硬碟上按順序一個位元組挨著一個位元組擺放的,讀取文件的時候,會從文件首地址一直讀到文件結束標記「-1」。如果能夠直接把文件裡面的幾個位元組刪掉,那麼下次這個文件怎麼讀呢?怎麼區分中間那幾個位元組被刪掉了呢?所以對於這些簡單的文件來說,要想直接刪除裡面的內容是不可能的。
    一般有兩個方法實現這個功能:
    1.把要保留的內容寫到另一個文件中,要刪掉的內容就不用寫了。
    2.把要保留的內容存儲到一個字元串變數中,要刪掉的內容不用存儲,最後把這個字元串再寫回到原文件中覆蓋原來的內容。

  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語言刪除文件第一行

#include<stdio.h>
voidmain(){
FILE*fin,*fout;
intc;

fin=fopen("t.txt","r");
fout=fopen("t.tmp","w");
while(1){
c=fgetc(fin);
if(EOF==c)break;
if(' '==c)break;
}
if(EOF!=c)
while(1){
c=fgetc(fin);
if(EOF==c)break;
fputc(c,fout);
}
fclose(fin);
fclose(fout);
remove("t.txt");
rename("t.tmp","t.txt");
}

㈥ C語言:如何根據需要刪除文件中特定的行

C語言文件操作有覆蓋和追加兩種模式,但不提供插入模式。所以要在文件中指定行進行刪除或者插入,需要按照如下流程操作: 1、以只讀打開文件; 2、將文件逐行讀入到內存中; 3、關閉文件; 4、在內存中對指定行插入或者刪除; 5、以只寫打開文件; 6、將修改後的數據寫入文件; 7、關閉文件。參考代碼:假定文件最多100行,執行刪除第5行,並在原第8,9行中間插入一行數據為例,代碼如下: #include #include char buf[100][1000];int main(){ FILE *fp; char *s="abcdef\n";//要插入的數據 int i=0; int n=0; fp = fopen("my.txt", "r");//讀方式打開文件 while(fgets(buf[n], 1000, fp) != EOF)//循環讀取所有數據 n++; fclose(fp);//關閉文件。 for(i = 4; i<7; i ++)//刪除第五行 strcpy(buf[i],buf[i+1]); strcpy(buf[7], s);//插入到第8行。 fp=fopen("my.txt", "w");//寫方式打開文件。 for(i = 0; i < n; i ++)//寫入所有處理後的數據。 fputs(buf[i], 1000, fp); fclose(fp);//關閉文件。 return 0; }

㈦ c語言刪除文件指定的某一行

這個程序適用於文件不是很大的情況,最好不要大於2G
先說思路,把文本文件按行讀入內存,在內存中的結構是一個雙向鏈表,每一個鏈表節點放一行。
文本文件 a.txt 先准備好,比如內容如下:
this is line 1
this is line 2
this is line 3
this is line 4
this is line 5
this is line 6
//以下是代碼
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
typedef struct lnode{ //define line node
struct lnode *prev;
struct lnode *next;
char *line;
} lnode;
typedef struct line_in_mem{
lnode *head;
lnode *tail;
} line_in_mem;
lnode *newnode(void){ // return a node in heap
return (lnode *)malloc(sizeof(lnode));
}
lnode *get_position(line_in_mem *lines){ // prepare an lnode whose line is NULL, to store a line read from file
lnode *node = newnode();
if(!node)
return NULL;
node->prev = node->next = NULL;
if(lines->head == NULL)
lines->head = lines->tail = node;
else{
lines->tail->next = node;
node->prev = lines->tail;
lines->tail = node;
}
return node;
}
void readfile(line_in_mem *lines, FILE *file){ // read lines from file and store them in struct line_in_mem
char *buf = NULL;
int n = 0;
while(getline(&buf, &n, file) > 0){
lnode *node = get_position(lines);
if(node)
node->line = buf;
else
exit(-1);
buf = NULL;
}
}
static void print_line(line_in_mem *line){ // show lines in mem, which may not be needed
lnode *node;
for(node = line->head; node ; node = node->next){
printf("%s", node->line);
}
}
void delete_line(line_in_mem *line, int line_no){ //given a line number, delete it from the list. if line_no is less than 0 or bigger than total of lines, do nothing
lnode *node = line->head;
while(--line_no > 0 && node)
node = node->next;
if(!node)
return;
if(node->prev)
node->prev->next = node->next;
if(node->next)
node->next->prev = node->prev;
free(node);
}
void savefile(line_in_mem *lines, FILE *file){ //truncate file to 0 and write back
freopen("a.txt","w",file);
lnode *node;
for(node = lines->head; node; node = node->next){
fwrite(node->line, sizeof(char), strlen(node->line)/sizeof(char), file);
}
}
int main(){
line_in_mem lines;
lines.head = lines.tail = NULL;
int line_no = 3;
FILE *file = fopen("a.txt","r");
if(!file)
return -1;
readfile(&lines, file); //read file into mem. the struct of file in mem is a list of line
print_line(&lines);
printf("---------------\n");
delete_line(&lines, line_no); //delete line_no in mem
print_line(&lines);
savefile(&lines, file); //write back
fclose(file);
return 0;
}

㈧ C語言如何把一個文本文件的某一行刪除掉

可以用c語言的fseek()函數(stdio.h),...隨機讀寫
要知道, 一個文件打開後有一個位置指針, 指示當前讀寫位置..
順序讀寫時, 讀寫一個, 系統自動把位置指針移動到下一位置...
用fseek()就可以手動更改..
用法是fseek(FILE*(文件指針),long offset(偏移量),int whence(參考位置))
參考位取值:0 文件開頭, 1 當前位置, 2 文件最後..
作用就是將FILE*指定的文件的位置指針從參考位置移動offset位元組
移動方向由offset的+/-決定..
另外用rewind()可以將位置指針恢復到文件頭..

㈨ c語言 如何刪除文件中的一行,求解答!

一個文件內的內容載入到內存之後是連續存儲的。(至少這種小文件,不超過4KB的)

如果想達到刪除一行的效果。至少有三種辦法可以實現

一、最簡單的辦法,建議讀到鏈表裡,刪除其中一個節點。然後再覆蓋寫回到文件。
二、找到要刪除的位置,fseek到該位置,將之後需要保留的文件內容,從這里開始寫。
三、利用內存映射,將文件映射到內存,直接對內存修改,但是對內存修改,也是需要類似於方法2,將需要保留的內容重新移動位置。

綜上,方法一最簡單。

㈩ 如何用c語言刪除文件中的重復行

思路就是,一行行讀文件,放入到內存字元串數組緩沖,再讀下一行,和字元串數組里進行比較,相同舍棄,不同保存到字元串數組。全部行處理完畢,把字元串數組寫迴文件即可。