在c语言中如何删除文件中的内容

ybdesire 2008-06-07 08:57:02
有很多往文件中写入内容或读出内容的函数如fprintf(),fputc()
但不知道哪个函数能够删除文件中的内容?????
往文件中写入一个字符串后删出这个字符串后面的所有内容,要怎么才能实现?
...全文
3113 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
glbfor_gtw 2012-01-06
  • 打赏
  • 举报
回复
C语言有一个文件 截断的函数。。叫 truncate 还是什么。。反正就是截断的 英文翻译。。。
q54145791 2011-12-19
  • 打赏
  • 举报
回复
如果是小的文件的话可以直接全部装载到内存然后在内存修改以后再写入文件。
如果是大的文件的话可以先读入部分内容到内存,然后和需要删除的内容对比,如果对比成功的话,再读一次,然后文件指针向前移动2位,再将读的内容写入文件指针,直到文件结尾。
if(fread(c,sizeof(***),1,fp)=="删除内容")
while(!feof(fp))
{
fread(c,sizeof(****),1,fp);
fseek(fp,-sizeof(***)*2,fp);
fwrite(c,sizeof(****),1,fp);
}
多来哈米 2011-11-05
  • 打赏
  • 举报
回复
好主意
windtker 2011-08-28
  • 打赏
  • 举报
回复
用这个rewind,把指针放置到文档开始位置就可以了
zhb123168 2010-08-13
  • 打赏
  • 举报
回复
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 void delcomm(FILE *fp1, FILE *fp2)
5 {
6 char c;
7 int i = 0;
8
9 while(!feof(fp1))
10 {
11 printf("test!\n");
12 if((c = fgetc(fp1)) == '\n')
13 {
14 fprintf(fp2, "\n");
15 }
16 else
17 {
18 switch(i)
19 {
20 case 0:
21 if(c == '/')
22 {
23 c = fgetc(fp1);
24 if(c == '/')
25 {
26 while(c != '\n')
27 {
28 c = fgetc(fp1);
29 }
30 i = 0;
31 fprintf(fp2, "\n");
32 break;
33 }
34 else
35 {
36 if(c == '*')
37 {
38 i = 3;
39 break;
40 }
41 i = 1;
42 }
43 }
44 else
45 {
46 fprintf(fp2, "%c", c);
47 }
48 break;
49 case 1:
50 if(c == '*')
51 {
52 i = 2;
53 }
54 else
55 {
56 fprintf(fp2, "/%c", c);
57 i = 0;
58 }
59 break;
60 case 2:
61 if(c == '*')
62 {
63 i = 3;
64 }
65 break;
66 case 3:
67 i = (c == '/') ? 0 : 2;
68 break;
69 }
70 }
71 }
72 }
73 int main()
74 {
75 FILE *fp1, *fp2;
76
77 if((fp1 = fopen("1.c", "r")) == NULL)
78 {
79 printf("Open file 1.c error!\n");
80 exit(1);
81 }
82 if((fp2 = fopen("2.c", "w")) == NULL)
83 {
84 printf("Open file 2.c error!\n");
85 exit(1);
86 }
87
88 delcomm(fp1, fp2);
89
90 fclose(fp1);
91 fclose(fp2);
92
93 return 0;
94 }
geekblizzarddc 2009-06-15
  • 打赏
  • 举报
回复
帮顶
lala9517 2008-06-08
  • 打赏
  • 举报
回复
感觉还是全读出来,修改了再写进去吧
虽然开销大点,但没想到别的办法。。。。。。
jieao111 2008-06-08
  • 打赏
  • 举报
回复

ofstream out(1.txt);
out<<"原来的全部删除了";
jieao111 2008-06-08
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 wanfustudio 的回复:]
关键要看你写入字符串的位置。
[/Quote]
开头的话,好实现,^_^
puzzlesky 2008-06-08
  • 打赏
  • 举报
回复
没看懂楼主的要求。
ybdesire 2008-06-08
  • 打赏
  • 举报
回复
读出来,修改以后在送入文件,如果这个修改是“删除”,那么送入的只能覆盖掉文件中的一部分内容,将来在读时可能会产生bug。
看来只能是 读出来,修改,删除原文件,重建文件,在把修改好的送入那个新建的文件里了
谢谢大家~ ~ 不知还有没有好方法?
ming470612141 2008-06-08
  • 打赏
  • 举报
回复
我觉得应该很难实现,唯一的实现方法就是不停地移动文件指针
然后修改文件中的部分内容,但是这样太难控制了

所以我觉得应该是先将文件中的内容读到内存中,然后对内存中的内容进行修改,
最后写入到修改的文件中去,就可以了,这样就非常方便了
飞哥 2008-06-07
  • 打赏
  • 举报
回复
关键要看你写入字符串的位置。
飞哥 2008-06-07
  • 打赏
  • 举报
回复
应该没有此类的函数

文件毕竟是在外存存储的,你之前删除了一块,那文件还能用了吗?
Supercaller 2008-06-07
  • 打赏
  • 举报
回复
lz你现在已经使用了一个标准的方法了
visame 2008-06-07
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sunman1982 的回复:]
ios::trunc 貌似是这个选项, 自己查吧。
[/Quote]
别人问的是C语言好不好!
我觉得这个要求不能实现。没有删除文件中某一段内容的函数
因为文件毕竟不是内存,可以随便删改的。
你只能先读入再写出最后覆盖之类的
sunman1982 2008-06-07
  • 打赏
  • 举报
回复
标准c fopen
用“w”打开的文件只能向该文件写入。若打开的文件不存在,则以指定的文件名建立该文件,若打开的文件已经存在,则将该文件删去,重建一个新文件。
ybdesire 2008-06-07
  • 打赏
  • 举报
回复
我要标准C~~
不知有没有相关函数~~~
如果能删除部分当然是最好了,不行的话只能把想要的部分拷下来,
删除那个文件后重建一个在送进去了~~~~
sunman1982 2008-06-07
  • 打赏
  • 举报
回复
ios::trunc 貌似是这个选项, 自己查吧。
lijiawlm 2008-06-07
  • 打赏
  • 举报
回复
楼主好像是要部分删除文件中的内容~~
好难^^^
加载更多回复(3)

70,019

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧