[問題] LRTHW ex16問題

作者: fsj (夏天就是要去野台!)   2013-04-14 19:07:17
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的關係嗎?
還是有其他的原因呢?
謝謝各位!
作者: mars90226 (火星人)   2013-04-14 20:55:00
模式改成"w+",才不會把檔案清空
作者: fsj (夏天就是要去野台!)   2013-04-14 23:44:00
您好, 我修改為target=File.open(filename, "w+")然後讀target.size 仍然為 0我會再試著用w+去google一下, 謝謝!
作者: mars90226 (火星人)   2013-04-15 09:43:00
你有確認你的檔案有東西嗎?
作者: fsj (夏天就是要去野台!)   2013-04-15 23:05:00
有確認, 而且我另外在刪檔前寫了一行直接file.size是有大小的所以覺得奇怪..然後去試"w", 或read mode都不會有大小
作者: godfat (godfat 真常)   2013-04-16 22:23:00
你的名稱不一致所以看不出來你怎麼測的,但大概是沒flush吧
作者: lTERRAl (臥龍光線 \|/ \|/)   2013-04-17 17:43:00
有可能是開檔之後並沒有關檔 也就是還在暫存檔中而size這個method是從外界下size指令 所以檔案並未存入所以得到0這個回傳 你可以試試close後再下target.size
作者: fsj (夏天就是要去野台!)   2013-04-17 22:21:00
謝謝各位, 的確是因為沒有close所造成的, 我關掉隔天再開就發現了, 謝謝樓上各位!!

Links booklink

Contact Us: admin [ a t ] ucptt.com