2009-08-12 54 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

例外情况通常很慢,所以无论何时问题不严重,最好使用返回标志以提高效率。只要文件/目录存在,我认为没有用例外,实际上会发现一个恼人的。像这样,计算总文件大小只需简单地将它们相加,而不需要任何错误处理。