[問題] C語言檔案內容處理

看板C_and_CPP (C/C++)作者 (喔唷唷唷唷唷)時間11年前 (2015/04/19 19:48), 編輯推噓2(2020)
留言22則, 4人參與, 最新討論串1/1
開發平台(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並無法使用 請問問題出在哪裡? 謝謝大家指教. -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.194.220.143 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1429444081.A.C13.html

04/19 19:57, , 1F
r+ ...
04/19 19:57, 1F

04/19 19:57, , 2F
沒事
04/19 19:57, 2F

04/19 19:58, , 3F
檔案串流是這樣,你讀取到哪裡,指標就指到哪裡
04/19 19:58, 3F

04/19 20:00, , 4F
所以如果要直接對串流做修改,要再修改指標位址
04/19 20:00, 4F

04/19 20:00, , 5F
fseek
04/19 20:00, 5F

04/19 20:12, , 6F
char ch;
04/19 20:12, 6F

04/19 20:13, , 7F
FILE * fp = fopen("C:\\s.txt", "r+");
04/19 20:13, 7F

04/19 20:13, , 8F
@@ 手機掛了,請無視上面兩行 Orz
04/19 20:13, 8F

04/19 20:15, , 9F
http://pastie.org/10101324 大概像這樣吧..
04/19 20:15, 9F

04/19 20:19, , 10F
謝謝樓上兩位解答 感恩~
04/19 20:19, 10F

04/19 20:43, , 11F
抱歉我只是雞婆想問... 這種直接對檔案做修改處理的 ,
04/19 20:43, 11F

04/19 20:44, , 12F
真的會比全都 dump 到記憶體改完,再一次寫回去快嗎 ???
04/19 20:44, 12F

04/19 20:44, , 13F
我的記憶還停留在對檔案處理的函式用得愈少愈好,拉到mem
04/19 20:44, 13F

04/19 20:45, , 14F
裡做完再一次處理速度比較快...
04/19 20:45, 14F

04/19 20:46, , 15F
fputc()是buffered output,你需要用fread()/fwrite()
04/19 20:46, 15F

04/19 20:46, , 16F
達成直接讀寫。
04/19 20:46, 16F

04/19 20:47, , 17F
至於快或慢,當檔案比可用記憶體大很多、或者很久很久
04/19 20:47, 17F

04/19 20:49, , 18F
才要更改檔案內一些小地方時,buffered read是否還一樣
04/19 20:49, 18F

04/19 20:49, , 19F
好呢?
04/19 20:49, 19F

04/19 20:52, , 20F
原來如此.. 那應是我讀寫的算小檔而已 (數MB), 感謝 M 大
04/19 20:52, 20F

04/19 20:56, , 21F
也只是理論而已 畢竟現在這種記憶體很少又沒有VM的狀況
04/19 20:56, 21F

04/19 20:57, , 22F
不多 但是像單晶片上可能就有差了
04/19 20:57, 22F
文章代碼(AID): #1LCvNnmJ (C_and_CPP)
文章代碼(AID): #1LCvNnmJ (C_and_CPP)