2009-08-12 6 views
0

ドキュメントを返すと言う:FILE_NAMEのサイズを返します ルビーFile.sizeが0

File.size(FILE_NAME)=>整数

File.size?(FILE_NAME)=>整数または nilを返しますnilの場合file_nameにはそうでない場合は、 ファイルのサイズを存在しないか、ゼロのサイズを持っていない ありません。実際に

は(ルビー1.8.7はi386-MSWIN32):

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

nilが私のためのローミングサービスになりますが、0?私は代わりに例外を期待します。誰かがこれの理由を見ますか?

+0

おそらく例外が予想されるのは、あまりにも多くの例外をスローする言語に慣れているからです。 – Chuck

+0

@jason:確かにそれはファイルシステムに依存します。試してください:File.size( '/ lost + found')。また、試してみてください:File.size( '/ proc')。 :-P –

答えて

2

ディレクトリは、です。まあ、私はいくつかのオペレーティングシステムではないと思いますが、Unixベースのすべてのオペレーティングシステムではそうです。

もちろん、Unixシステムでは、「通常の」ファイルシステム(すなわち、/procなどではなく、実際のファイルを持つもの)のディレクトリもサイズがゼロではありません。

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

ええ、 "c:/ dir"は彼がUnixにいないという手掛かりであったはずです。 –

+0

ああ..今、ありがとう。 – alex2k8

+0

@JS Bangs:それは当然ですが、RubyはUnix向けに設計されているため、File.sizeがディレクトリで呼び出されたときに例外をスローしないなど、UNIXとの互換性を保証するための機能があります。 :-P –

1

例外は一般的に遅いため、問題が重大でない場合は、効率の理由からリターンフラグを使用する方がよいでしょう。ファイル/ディレクトリが存在する限り、私は例外のための使用を見ておらず、実際には迷惑なものを見つけるでしょう。このように、合計ファイルサイズを計算するのは、単純にエラー処理を必要とせずに追加するだけです。