Re: [問題] 關於讀檔和寫檔
※ 引述《ledia (下班後才下棋)》之銘言:
: ※ 引述《LPH66 ((short)(-15074))》之銘言:
: : 順便藉這個機會寫一下簡易版 fopen mode string 的分別法:
: : "r" 從頭開始讀、不洗掉內容
: : "w" 從頭開始寫入、洗掉內容
: : "a" 從尾巴開始寫入、不洗掉內容
: : 附上一個 "+" 就是都改成讀寫
: : 不過一般如果真要用同時讀寫來 update 的話 通常是開成 "r+"
: : 因為 "a+" 在檔案的內部指標不在最後面時寫入似乎會發生奇怪的現象
: : 然後是
: : "t" 開成文字模式
: : "b" 開成二進位模式
: 其實 win32 裡的 fopen 還有很多奇奇怪怪的 mode
: 像是 c, n, N, S, R, T, D
: 可以參考 http://msdn.microsoft.com/en-us/library/yeby3zcb%28VS.80%29.aspx
: 分享其中一個例子 c
: 之前遇過某一隻程式
: 他需要很頻繁的更新同一個檔案
: 但是好死不死當無預警的重開機發生了 (比如說停電、被踢到插頭)
: 他所更新的檔案有時候就會變成全是 0 的壞檔!
: 這是可複製的 bug
: 像是 fflush 、寫完馬上 fclose 都用了就是沒有任何幫助
: 找了很久發現原來是因為 win32 的 fflush fclose 都不保證寫進 disk (!)
: 也許和 OS 在 I/O 的處理上, 使用 disk cache 的機制有關
: 總之要確保一定會寫到 disk 裡, 就是要加上 mode c
: 比如說 fopen(filename, "wc"); // commit flag
: 經實測, 真的再怎麼亂重開機, 原本的問題都不會發生了
: 感覺 M$ 在這方面下了不少功夫 (我想主要是為了 I/O 的效率)
: 所以為了不要動不動被 side effect 給婊到
: 有問題時勤讀 manual 我想是個很重要的習慣... orz
我也想請問一下
最近在wince6.0的系統中跑一支程式也是會不斷的寫入檔案
是用writefile來寫的,每秒會寫入一次
可是目前遇到一個問題,系統上的開機檔是放在SD卡中
經過不斷的重開機後有時候會造成SD卡的資料都消失
沒有固定的規則可循
然後下一次開機因為開機檔沒了所以開機失敗
是我寫檔的方式有問題嗎
我在thread裡面是不斷的createfile跟writefile然後再close掉
為什麼會出現這個現象搞不太懂@@
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 203.70.125.159
推
12/21 22:52, , 1F
12/21 22:52, 1F
→
12/21 22:52, , 2F
12/21 22:52, 2F
→
12/21 22:53, , 3F
12/21 22:53, 3F
→
12/21 22:58, , 4F
12/21 22:58, 4F
討論串 (同標題文章)