A. 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");//暂停一下
}
B. 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. C语言如何把一个文本文件的某一行删除掉
可以用c语言的fseek()函数(stdio.h),...随机读写
要知道, 一个文件打开后有一个位置指针, 指示当前读写位置..
顺序读写时, 读写一个, 系统自动把位置指针移动到下一位置...
用fseek()就可以手动更改..
用法是fseek(FILE*(文件指针),long offset(偏移量),int whence(参考位置))
参考位取值:0 文件开头, 1 当前位置, 2 文件最后..
作用就是将FILE*指定的文件的位置指针从参考位置移动offset字节
移动方向由offset的+/-决定..
另外用rewind()可以将位置指针恢复到文件头..
D. 运用C语言如何删除文件中的某条数据
比如
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
char *insert = "EE,EE,EE,", tmp[256]={0};
int pos, i;
/*test.txt文件内容:01,00,00,00,0E,00,00,00,00,00,00,E1,E2,00,00,00,00*/
fp = fopen("test.txt", "r+");
/*1、等长覆盖*/
fseek(fp, 12, 1);
fprintf(fp, "0F"); /*直接写入等长度的数据就可以完成覆盖*/
/*2、E2后插入“EE,EE,EE,” */
fseek(fp, 25, 1);
pos = ftell(fp); /*插入位置*/
fgets(tmp, 256, fp); /*把后面的数据缓存*/
fseek(fp, pos, 0); /*移动到插入位置*/
fprintf(fp, insert); /*插入,就是写入数据*/
fprintf(fp, tmp); /*把原来的数据再写回来, 完成*/
/*3、01读取后++两次,并重新写回文件*/
rewind(fp);
fscanf(fp, "%x", &i); /*读取数据*/
i = i+2; /* +2 */
fseek(fp, -2, 1); /*调整指针*/
fprintf(fp, "%02x", i); /*写文件*/
fclose(fp);
system("PAUSE");
return 0;
}
E. c语言 如何删除文件中的一行,求解答!
一个文件内的内容加载到内存之后是连续存储的。(至少这种小文件,不超过4KB的)
如果想达到删除一行的效果。至少有三种办法可以实现
一、最简单的办法,建议读到链表里,删除其中一个节点。然后再覆盖写回到文件。
二、找到要删除的位置,fseek到该位置,将之后需要保留的文件内容,从这里开始写。
三、利用内存映射,将文件映射到内存,直接对内存修改,但是对内存修改,也是需要类似于方法2,将需要保留的内容重新移动位置。
综上,方法一最简单。