当前位置:首页 » 编程语言 » 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语言删除文件中的重复行

思路就是,一行行读文件,放入到内存字符串数组缓冲,再读下一行,和字符串数组里进行比较,相同舍弃,不同保存到字符串数组。全部行处理完毕,把字符串数组写回文件即可。