1、重建一个临时文件,把原文件内容向临时文件里拷贝,遇到要删除的内容就跳过。结束后关闭文件,用remove("原文件名")把原文件删除,用rename("临时文件名","原文件名")把临时文件名改为原文件名就OK了。
2、比如要按题面要求在原文件123.txt中删除编号为2和4的信息行,则可用以下代码实现:
//#include "stdafx.h"//If the vc++6.0, with this line.#include "stdio.h"
#include "stdlib.h"
int main(void){
FILE *fin,*ftp
char a[1000]
fin=fopen("123.txt","r")//读打开原文件123.txt
ftp=fopen("tmp.txt","w")//写打开临时文件tmp.txt
if(fin==NULL || ftp==NULL){
printf("Open the file failure...\n")
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")//将临时文件名改为原文件名
return 0
}
1.首先我们打开【控制面板】,然后再点击【邮件】选项。
2.
进入【邮件】对话框中,点击【数据文件】进入。
3.
在【数据文件】中,选中文件再点击【删除】即可。
你平时应该有这样的经历,打开一个.txt格式的小说,在里面删除几个字,系统反应却很慢,这是为什么呢?因为文件里的内容都是在硬盘上按顺序一个字节挨着一个字节摆放的,读取文件的时候,会从文件首地址一直读到文件结束标记“-1”。如果能够直接把文件里面的几个字节删掉,那么下次这个文件怎么读呢?怎么区分中间那几个字节被删掉了呢?所以对于这些简单的文件来说,要想直接删除里面的内容是不可能的。
一般有两个方法实现这个功能:
1.把要保留的内容写到另一个文件中,要删掉的内容就不用写了。
2.把要保留的内容存储到一个字符串变量中,要删掉的内容不用存储,最后把这个字符串再写回到原文件中覆盖原来的内容。
例程:
#include<stdio.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")//暂停一下
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)