您看到了這個看似怪異行爲的原因是因爲每個File
對象都有一個File::Stat object封裝什麼時候採取一些行動時觸發更新時纔會更新文件的常見狀態信息。在這種情況下,觸發器是在文件上調用size
。您可以檢查stat
對象以查看時間戳。
這裏是與stat
通話中拋出一個完全重複的例子。
irb(main):021:0* f = File.new "out", "w"
=> #<File:out>
irb(main):022:0> f.write "hi"
=> 2
irb(main):023:0> File.zero? f.path
=> true
irb(main):024:0> f.stat
=> #<File::Stat dev=0x801, ino=1062714, mode=0100664, nlink=1, uid=1000, gid=1000, rdev=0x0, size=0, blksize=4096, blocks=0, atime=2015-11-05 15:50:25 -0800, mtime=2015-11-05 15:52:08 -0800, ctime=2015-11-05 15:52:08 -0800>
irb(main):025:0> f.size # triggers an update
=> 2
irb(main):026:0> File.zero? f.path
=> false
irb(main):027:0> f.stat
=> #<File::Stat dev=0x801, ino=1062714, mode=0100664, nlink=1, uid=1000, gid=1000, rdev=0x0, size=2, blksize=4096, blocks=8, atime=2015-11-05 15:52:47 -0800, mtime=2015-11-05 15:52:45 -0800, ctime=2015-11-05 15:52:45 -0800>
雖然,我想一個File
對象上調用write
應觸發更新。
編輯:我想出了爲什麼write
不會觸發更新。 write
是File
的父類(IO
)的一種方法。但是size
和stat
都是File
的方法。因此,必須在File
中實施write
方法以獲得(或知曉)stat
。我懷疑在File
中實施的方法的任何調用將更新stat
。
顯示'[1]'和'[2]'中發生了什麼可能會有所幫助。你寫的文件? – cremno
不,我正在檢查路徑 –
有沒有可能是網絡文件服務器的問題? NFS用於在當天做一些奇怪的事情...... –