关于FILE操作

dimple0513 2009-04-27 12:19:01
我用FILE结构体进行文件读写操作,本意是分两次写入一个文件,达到“dimple love running,swimming,shopping”效果,代码如下:
FILE *pFile=fopen(_T("1.txt"),_T("w"));
fwrite(_T("running,swimming,shopping"),1,strlen(_T("running,swimming,shopping")),pFile);
fseek(pFile,0,SEEK_SET);
fwrite(_T("dimple love "),1,strlen(_T("dimple love ")),pFile);
fclose(pFile);


但是最终效果却是 "dimple lovemming,shopping",相当于dimple love把"running swi" 覆盖了,不知道是什么原因,请指教!
...全文
101 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
柯大侠爱喝水 2011-07-15
  • 打赏
  • 举报
回复
太高深了,只有学习的份,悲剧啊,我想发表言论
lingyin55 2009-04-27
  • 打赏
  • 举报
回复
fseek(pFile,0,SEEK_SET)这句重新定位了指针,你是连接着写的,把这句去掉
goodname 2009-04-27
  • 打赏
  • 举报
回复
fseek(pFile,0,SEEK_SET);

这句你又把写指针指到开头去了。
去掉它就行。
  • 打赏
  • 举报
回复
此外,如果想多次open都在文件尾添加,就用ab模式打开。
Paradin 2009-04-27
  • 打赏
  • 举报
回复
fseek(pFile,0,SEEK_SET); 把指针定位到开始处,从开始出写当然就覆盖了
这句去掉试试
  • 打赏
  • 举报
回复
fseek(pFile,0,SEEK_SET);

这里干嘛要定位,你打开一次,就一直写就可以了,文件指针是顺移的。
jackyjkchen 2009-04-27
  • 打赏
  • 举报
回复
fseek(pFile,0,SEEK_SET); 这一句去了,相当于回到了文件头
xmanlin 2009-04-27
  • 打赏
  • 举报
回复
fopen,fread,fwrite都会遇上这个问题,就是无法直接进行插入操作, 否则就覆盖原内容. 不知道createfile,read,write系列函数会不会有这个麻烦.
12楼的方法一定可行,本人也做过这样的事情. 不过要是文件里的东西很多,操作起来看起来很笨. 不过也许也只能这样做.
晨鲔鱼曦 2009-04-27
  • 打赏
  • 举报
回复
rb.不是跟好。
fseek(fp,0,SEEK_END);
hznat 2009-04-27
  • 打赏
  • 举报
回复
12楼的方法应该可行。
夹心饼干 2009-04-27
  • 打赏
  • 举报
回复
把文件里的东西读到一个buf里,用strcat把你要写的和buf连接一起,在用你目前的方法写进文件去
dimple0513 2009-04-27
  • 打赏
  • 举报
回复
我的想法是把第二次想写的东西写在第一次写进去的文字前面,所以我要移动到开头,不知道大家有什么建议能实现这个...[Quote=引用 2 楼 hairetz 的回复:]
fseek(pFile,0,SEEK_SET);

这里干嘛要定位,你打开一次,就一直写就可以了,文件指针是顺移的。
[/Quote]
dimple0513 2009-04-27
  • 打赏
  • 举报
回复
按照你的方法,得到的结果是一样的,还是被铺盖了前11个字符...[Quote=引用 8 楼 liliangbao 的回复:]
C/C++ codeFILE *pFile=fopen(_T("1.txt"),_T("w"));

//应该是这样吧fwrite(_T("running,swimming,shopping"),strlen(_T("running,swimming,shopping")),1,pFile);
fwrite(_T("running,swimming,shopping"),1,strlen(_T("running,swimming,shopping")),pFile);

//文件指针移到文件头,下面的不就覆盖了以前写入的
fseek(pFile,0,SEEK_SET);

//应该这样fwrite(_T("dimple love "),strlen(_T("dimple love ")),1,pFi…
[/Quote]
dimple0513 2009-04-27
  • 打赏
  • 举报
回复
我的本意就是分两次写,然后回到开头,从开头写第二次想写的内容。这样一定会覆盖么?
liliangbao 2009-04-27
  • 打赏
  • 举报
回复
FILE *pFile=fopen(_T("1.txt"),_T("w")); 

//应该是这样吧fwrite(_T("running,swimming,shopping"),strlen(_T("running,swimming,shopping")),1,pFile);
fwrite(_T("running,swimming,shopping"),1,strlen(_T("running,swimming,shopping")),pFile);

//文件指针移到文件头,下面的不就覆盖了以前写入的
fseek(pFile,0,SEEK_SET);

//应该这样fwrite(_T("dimple love "),strlen(_T("dimple love ")),1,pFile);
fwrite(_T("dimple love "),1,strlen(_T("dimple love ")),pFile);
fclose(pFile);
pause123 2009-04-27
  • 打赏
  • 举报
回复
学习

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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