作者fsj (夏天就是要去野台!)
看板Ruby
標題[問題] LRTHW ex16問題
時間Sun Apr 14 19:07:17 2013
Ruby 2.0
各位好, 我在複習LRTHW的時候遇到一個問題, 不過跟練習本身無關
http://ruby.learncodethehardway.org/book/ex16.html
filename = ARGV.first
target = File.open(filename, 'w')
target.truncate(target.size)
其中這行code是作者寫錯的
target.truncate(target.size)
他說應該是要改成.truncate(0), 檔案清光.
我剛才拿.size來練習一下, 發現即便是在清除檔案之前的target.size都是0
於是我改掉write mode, 換成read mode, 但是.size一樣還是0
如果我直接讀filename.size的話就可以成功讀到檔案大小
是因為File.open的關係嗎?
還是有其他的原因呢?
謝謝各位!
--
http://www.facebook.com/AdJudge
廣告, 創意無限
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 1.164.81.78
1F:推 mars90226:模式改成"w+",才不會把檔案清空 04/14 20:55
2F:→ fsj:您好, 我修改為target=File.open(filename, "w+")然後讀 04/14 23:44
3F:→ fsj:target.size 仍然為 0 04/14 23:45
4F:→ fsj:我會再試著用w+去google一下, 謝謝! 04/14 23:45
5F:推 mars90226:你有確認你的檔案有東西嗎? 04/15 09:43
6F:→ fsj:有確認, 而且我另外在刪檔前寫了一行直接file.size是有大小的 04/15 23:05
7F:→ fsj:所以覺得奇怪..然後去試"w", 或read mode都不會有大小 04/15 23:06
8F:→ godfat:你的名稱不一致所以看不出來你怎麼測的,但大概是沒flush吧 04/16 22:23
9F:推 lTERRAl:有可能是開檔之後並沒有關檔 也就是還在暫存檔中 04/17 17:43
10F:→ lTERRAl:而size這個method是從外界下size指令 所以檔案並未存入 04/17 17:44
11F:→ lTERRAl:所以得到0這個回傳 你可以試試close後再下target.size 04/17 17:46
12F:→ fsj:謝謝各位, 的確是因為沒有close所造成的, 我關掉隔天再開 04/17 22:21
13F:→ fsj:就發現了, 謝謝樓上各位!! 04/17 22:21