本文目录一览:
C语言如何把一个文本文件的某一行删除掉?
可以用c语言的fseek()函数(stdio.h),...随机读写
要知道, 一个文件打开后有一个位置指针, 指示当前读写位置..
顺序读写时, 读写一个, 系统自动把位置指针移动到下一位置...
用fseek()就可以手动更改..
用法是fseek(FILE*(文件指针),long offset(偏移量),int whence(参考位置))
参考位取值:0 文件开头, 1 当前位置, 2 文件最后..
作用就是将FILE*指定的文件的位置指针从参考位置移动offset字节
移动方向由offset的+/-决定..
另外用rewind()可以将位置指针恢复到文件头..
C语言,删除一行
删除文件里的一行内容,后面的行向前移动一行,清空最后一行,程序如下:
假定一行不超过1000字符,
删去第3行,L=3.
输入输出文件名
a.txt
#includestdio.h
void
main()
{
FILE
*fin;
fpos_t
pos_w,pos_r,pos;
int
i,k,L=3;
char
*one_line;
one_line
=
(char
*)
malloc(1000*sizeof(char));
fin
=
fopen
("a.txt","rb+");
for
(i=1;iL;i++)
fgets(one_line,999,fin);
fgetpos
(fin,pos_w);
fgets(one_line,999,fin);
//
delete
fgetpos
(fin,pos_r);
pos
=
pos_r;
while
(1
==
1)
{
fsetpos
(fin,pos);
if
(fgets(one_line,999,fin)
==NULL)
break;
fgetpos
(fin,pos_r);
pos
=
pos_w;
fsetpos
(fin,pos);
fprintf(fin,"%s",one_line);
fgetpos
(fin,pos_w);
pos
=
pos_r;
}
pos
=
pos_w;
fsetpos
(fin,pos);
k
=
strlen(one_line);
for
(i=0;ik;i++)
fputc(0x20,fin);
fclose(fin);
}
c语言删除文件中的指定的一行数据怎么做
你平时应该有这样的经历,打开一个.txt格式的小说,在里面删除几个字,系统反应却很慢,这是为什么呢?因为文件里的内容都是在硬盘上按顺序一个字节挨着一个字节摆放的,读取文件的时候,会从文件首地址一直读到文件结束标记“-1”。如果能够直接把文件里面的几个字节删掉,那么下次这个文件怎么读呢?怎么区分中间那几个字节被删掉了呢?所以对于这些简单的文件来说,要想直接删除里面的内容是不可能的。
一般有两个方法实现这个功能:
1.把要保留的内容写到另一个文件中,要删掉的内容就不用写了。
2.把要保留的内容存储到一个字符串变量中,要删掉的内容不用存储,最后把这个字符串再写回到原文件中覆盖原来的内容。
例程:
#includestdio.h
struct data
{
int bianhao;
char fenlei[10];
char ming[12];
int shijian[3];
float jiage;
}
void del(int num){//定义删除指定编号的内容的函数
FILE *f1;//操作的文件
long length;//文件总长度
char *f2;//用于记录要保存的内容
char s[100];//用于保存每次读取的一行内容
int n;//用于存储编号
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);//关闭文件
}
int main(){
del(1); //调用上面定义的函数删除指定编号的内容
del(3); //参数为编号
system("pause");//暂停一下
}
怎么用c语言删除文件第一行
#include stdio.h
void main() {
FILE *fin,*fout;
int c;
fin=fopen("t.txt","r");
fout=fopen("t.tmp","w");
while (1) {
c=fgetc(fin);
if (EOF==c) break;
if ('\n'==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");
}