[问题] 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