注册 登录
编程论坛 C++教室

[求助]文件写操作,怎么删除某指定行

jiaju111 发布于 2007-06-19 22:40, 3998 次点击

问题1:怎么才能在文本文件的开头进行写操作而又不替换掉文本?

比如用ofstream out("000.txt", ofstream::in|ofstream::out)
进行写操作的话会把开头的文本给替换掉
怎么避免替换?

问题2:怎么才能在文本中间进行写操作,或者替换掉文本中间的某一行,而又不改变其他内容?

问题3:怎么删除掉文本中的某一指定行?

大家帮我解决一下啊

谢谢了!

[此贴子已经被作者于2007-6-20 15:56:43编辑过]

8 回复
#2
野比2007-06-19 23:20
你可以用c语言的fseek()函数(stdio.h),...随机读写
要知道, 一个文件打开后有一个位置指针, 指示当前读写位置..
顺序读写时, 读写一个, 系统自动把位置指针移动到下一位置...
用fseek()就可以手动更改..
用法是fseek(FILE*(文件指针),long offset(偏移量),int whence(参考位置))
参考位取值:0 文件开头, 1 当前位置, 2 文件最后..

作用就是将FILE*指定的文件的位置指针从参考位置移动offset字节

移动方向由offset的+/-决定..

另外用rewind()可以将位置指针恢复到文件头..
#3
野比2007-06-19 23:22
你可以参考这篇文章..
[QUOTE]文件的随机读写

  前面介绍的对文件的读写方式都是顺序读写, 即读写文件只能从头开始,顺序读写各个数据。 但在实际问题中常要求只读写文件中某一指定的部分。 为了解决这个问题可移动文件内部的位置指针到需要读写的位置,再进行读写,这种读写称为随机读写。 实现随机读写的关键是要按要求移动位置指针,这称为文件的定位。文件定位移动文件内部位置指针的函数主要有两个, 即 rewind 函数和fseek函数。

  rewind函数前面已多次使用过,其调用形式为: rewind(文件指针); 它的功能是把文件内部的位置指针移到文件首。 下面主要介绍
fseek函数。

  fseek函数用来移动文件内部位置指针,其调用形式为: fseek(文件指针,位移量,起始点); 其中:“文件指针”指向被移动的文件。 “位移量”表示移动的字节数,要求位移量是long型数据,以便在文件长度大于64KB 时不会出错。当用常量表示位移量时,要求加后缀“L”。“起始点”表示从何处开始计算位移量,规定的起始点有三种:文件首,当前位置和文件尾。
其表示方法如表10.2。
起始点    表示符号(ISO标准)数字表示
──────────────────────────
文件首    SEEK_SET    0
当前位置   SEEK_CUR    1
文件末尾   SEEK_END     2
例如:
fseek(fp,100L,0);其意义是把位置指针移到离文件首100个字节处。还要说明的是fseek函数一般用于二进制文件。在文本文件中由于要进行转换,故往往计算的位置会出现错误。文件的随机读写在移动位置指针之后, 即可用前面介绍的任一种读写函数进行读写。由于一般是读写一个数据据块,因此常用fread和fwrite函数。下面用例题来说明文件的随机读写。
[/QUOTE]
#4
jiaju1112007-06-20 08:54

多谢兄弟指点

正在研究中……

#5
jiaju1112007-06-20 09:01
第2个问题已经解决

求教剩下的两个

谢谢了!

[此贴子已经被作者于2007-6-20 15:58:16编辑过]

#6
野比2007-06-20 19:52
3.删除...
找到待删除部分的起始和结束位置(A, B位)...从B位开始读取内容.....
写到A位....while(!EOF)...结束...
#7
jiaju1112007-06-20 22:00

这样的话最后会有残余啊

是不?

[此贴子已经被作者于2007-6-20 22:02:58编辑过]

#8
野比2007-06-20 22:07
你要最后写入EOF啊...
#9
jiaju1112007-06-20 22:20
恩,对

正在实现……
1