[問題] 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