2009-08-12 84 views
0

文檔說:紅寶石File.size爲目錄返回0

File.size(FILE_NAME)=>整數
返回FILE_NAME的大小。

File.size?(FILE_NAME)=>整數或零 返回nil如果file_name不 存在或大小爲零,的 尺寸文件否則。

實踐(紅寶石1.8.7 I386-mswin32):

File.size?('c:/dir') 
# => nill 
File.size('c:/dir') 
# => 0 

的零讓SENCE我,但0?我會期待一個例外。有人看到這個原因嗎?

+0

也許你會想到一個異常的原因是因爲你習慣於拋出太多異常的語言。 – Chuck 2009-08-12 15:06:00

+0

@jason:當然這是文件系統的依賴。試試:File.size('/ lost + found')。另請嘗試:File.size('/ proc')。 :-P – 2009-08-12 15:30:17

回答

2

目錄文件。那麼,我想在一些操作系統中它們不是,但是在所有基於Unix的操作系統中它們都是。

當然,在Unix系統中,「常規」文件系統中的目錄(即具有真實文件的目錄,而不是/proc等)也具有非零大小。

File.size('/etc') 
=> 12288 
+0

是的,但「c:/ dir」應該是他不在Unix上的線索。 – 2009-08-12 15:03:05

+0

啊..我現在看到了,謝謝。 – alex2k8 2009-08-12 15:04:28

+0

@JS Bangs:確實如此,我認爲最初爲Unix設計的Ruby具有編碼的功能,以確保某些Unix兼容性,例如在目錄上調用File.size時不引發異常。 :-P – 2009-08-12 15:06:27

1

例外情況通常很慢,所以無論何時問題不嚴重,最好使用返回標誌以提高效率。只要文件/目錄存在,我認爲沒有用例外,實際上會發現一個惱人的。像這樣,計算總文件大小隻需簡單地將它們相加,而不需要任何錯誤處理。