fwrite函数的问题?

hchack 2005-07-14 11:16:01
当我在文本中的某一行进行插入操作的时候,插入的内容存在了,但是它下面的内容怎么没有了?
...全文
625 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
megaboy 2005-07-14
  • 打赏
  • 举报
回复
to 楼主:

楼主使用w这个标志打开文件,那么不管用fseek把指针移动到哪里,系统都会把原文件内容清空,然后从文件头开始写数据。同样地,如果用了标志a,系统也是不管fseek如何移动指针,而总是从文件末尾开始写数据。

想随机读写文件的话,应该用r+打开文件。
megaboy 2005-07-14
  • 打赏
  • 举报
回复
下面是我回答另一个人的类似问题时所作的回答,给你参考一下,具体操作有些许不同,但原理一样:

楼主的需求是可以做到的,只不过有一点点麻烦而已。假设5515在文件偏移量100处,如果新改写的字符串加上'\0'的字符数量少于5515的字符数量,直接改写就行。如果比5515多,那就要用系统输入输出函数先把文件的长度增加两者的差值,再把后面的数据往后移,空出足够的地方,再写入,简化代码如下:(因为不知道楼主的5515是以int形式写入文件的,还是以四个字符分别写入的,我假设是以5515四个字符写入的)

#include<io.h>
#include<string.h>

int i,iFile;
long lSub,lNewLength,lFileSub,lFileLength;
char string[]="abcdef"; //假设这是改写字符串,并且长度大于5515
char temp;
iFile=open("test.dat",O_RDWR); //以可读可写方式打开文件
lSub=strlen(string)-4+1; //4是5515字符数量,差值包括'\0';
lseek(iFile,0l,SEEK_END);
lFileSub=tell(iFile)-100-4+1; //算出5515后面的字节数量;
lFileLength=filelength(iFile);
lNewlength=lFileLength+lSub;
chsize(iFile,lNewlength); //增加文件test.dat的长度,原文件末尾多出来的lSub个字节会自动
以'\0'填充
for(i=0;i<lFileSub;i++)
{
lseek(iFile,-i-lSub,SEEK_END);
read(&temp,sizeof(char),1,iFile);
lseek(iFile,-i,SEEK_END);
write(&temp,sizeof(char),1,iFile);
} //移动末尾的字节块。本来想一次过用malloc移动整块字节块的,但
想到楼主文件可能很大,不一定能分配到足够的内存,所以还是一
个一个字节地移动。
lseek(iFile,100l,SEEK_SET);
write(string,sizeof(char),strlen(string)+1,iFile);
close(iFile);
hchack 2005-07-14
  • 打赏
  • 举报
回复
fp=fopen(FileName, "w")//打开文件
fseek//定位文件
fwrite//将文件覆盖
但是如果插在数据的中间某一行,那么它下面的数据也没有了
OpenHero 2005-07-14
  • 打赏
  • 举报
回复
打开文件的格式~~~
有追加
有覆盖
有~~~
看打开文件的时候你选择的模式
hchack 2005-07-14
  • 打赏
  • 举报
回复
用什么办法才能不覆盖后面的?
jsjjms 2005-07-14
  • 打赏
  • 举报
回复
系统会把你后面的覆盖的。
junnyfeng 2005-07-14
  • 打赏
  • 举报
回复
插入前需要移动后面的内容,否则就覆盖了

Willpro 2005-07-14
  • 打赏
  • 举报
回复
文件是顺序保存的,从你插入的地方开始WRITE,所以就把你后面的东西覆盖了。插入就是覆盖,要想执行插入,就要先处理保存后面的内容,然后再紧跟写入!

兄弟,插入不是这么简单的!
jsjjms 2005-07-14
  • 打赏
  • 举报
回复
系统会把你后面的覆盖的。
robinzsy 2005-07-14
  • 打赏
  • 举报
回复
不能插入,只能覆盖。

69,373

社区成员

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

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