[问题] C语言档案内容处理

楼主: zoooooa (喔唷唷唷唷唷)   2015-04-19 19:47:58
开发平台(Platform): (Ex: VC++, GCC, Linux, ...)
VS2010
问题(Question):
想请问各位一个新手问题
如果我有一份txt档案内容为
111
我想把它更改成
222(长度不变)
除了先把它读出来到memory中修改完再写回去之外
有办法在读取的当下就直接做字符判断更改吗?
p = fopen("tmp.txt","r+");
while((c=fgetc(p))!=EOF)
{
if(c == '1')
{
fputc('2', p);
}
}
fclose(p);
这样的code并无法使用
请问问题出在哪里?
谢谢大家指教.
作者: TobyH4cker (Toby (我要当好人))   2015-04-19 19:57:00
r+ ...没事档案串流是这样,你读取到哪里,指标就指到哪里所以如果要直接对串流做修改,要再修改指标位址fseek
作者: EdisonX (卡卡兽)   2015-04-19 20:12:00
char ch;FILE * fp = fopen("C:\\s.txt", "r+");@@ 手机挂了,请无视上面两行 Orzhttp://pastie.org/10101324 大概像这样吧..
楼主: zoooooa (喔唷唷唷唷唷)   2015-04-19 20:19:00
谢谢楼上两位解答 感恩~
作者: EdisonX (卡卡兽)   2015-04-19 20:43:00
抱歉我只是鸡婆想问... 这种直接对档案做修改处理的 ,真的会比全都 dump 到内存改完,再一次写回去快吗 ???我的记忆还停留在对档案处理的函式用得愈少愈好,拉到mem里做完再一次处理速度比较快...
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-04-19 20:46:00
fputc()是buffered output,你需要用fread()/fwrite()达成直接读写。至于快或慢,当档案比可用内存大很多、或者很久很久才要更改档案内一些小地方时,buffered read是否还一样好呢?
作者: EdisonX (卡卡兽)   2015-04-19 20:52:00
原来如此.. 那应是我读写的算小档而已 (数MB), 感谢 M 大
作者: MOONRAKER (㊣牛鹤鳗毛人)   2015-04-19 20:56:00
也只是理论而已 毕竟现在这种内存很少又没有VM的状况不多 但是像单芯片上可能就有差了

Links booklink

Contact Us: admin [ a t ] ucptt.com