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?我会期待一个例外。有人看到这个原因吗?
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?我会期待一个例外。有人看到这个原因吗?
目录是文件。那么,我想在一些操作系统中它们不是,但是在所有基于Unix的操作系统中它们都是。
当然,在Unix系统中,“常规”文件系统中的目录(即具有真实文件的目录,而不是/proc
等)也具有非零大小。
File.size('/etc')
=> 12288
是的,但“c:/ dir”应该是他不在Unix上的线索。 – 2009-08-12 15:03:05
啊..我现在看到了,谢谢。 – alex2k8 2009-08-12 15:04:28
@JS Bangs:确实如此,我认为最初为Unix设计的Ruby具有编码的功能,以确保某些Unix兼容性,例如在目录上调用File.size时不引发异常。 :-P – 2009-08-12 15:06:27
例外情况通常很慢,所以无论何时问题不严重,最好使用返回标志以提高效率。只要文件/目录存在,我认为没有用例外,实际上会发现一个恼人的。像这样,计算总文件大小只需简单地将它们相加,而不需要任何错误处理。
也许你会想到一个异常的原因是因为你习惯于抛出太多异常的语言。 – Chuck 2009-08-12 15:06:00
@jason:当然这是文件系统的依赖。试试:File.size('/ lost + found')。另请尝试:File.size('/ proc')。 :-P – 2009-08-12 15:30:17