❶ 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语言库