Dir
- 与File
- s相比似乎很尴尬。许多方法与IO
方法类似,但Dir
不会从IO
继承。例如,tell
文档中的IO
显示为:
返回ios的当前偏移量(以字节为单位)。
当read
- 和tell
正常Dir
时,我得到的数字很大,如346723732
和422823816
。我原本期望这些整数更像“阵列式”,只是一个简单的范围。
Dir
?IO#tell
?Dir
- 如果不是Streams会有open
和close
函数?Dir
与正常IO
一样重要吗?有关Ruby Dir
如何工作的任何一般性解释都将受到赞赏。
更新另一个令人困惑的部分:如果Dir
不是IO
,为什么close会提出IOerror
?
关闭目录流。访问dir的任何进一步尝试都会引发IOError。
另请注意,在文档中它认为它是“目录流”。所以这又提出了一个问题:它们是否是流,如果没有,为什么命名约定?
答案 0 :(得分:3)
Dir#tell
的文档说:
Returns the current position in dir.
没有指明位置的含义。根据您使用的操作系统以及可能包含该目录的文件系统的类型,返回的值可能会有所不同。该值应视为不透明,不要试图以任何方式解释它。它所服务的唯一目的是能够将该值发送回操作系统,例如通过调用Dir#seek
。
目录不仅仅是一个巨大的文件。更典型的是,它们只是从文件名映射到包含文件数据的位置的信息。
你不应该(并且据我所知)不能自己写入目录。
答案 1 :(得分:1)
所以在一些IRC聊天后,我得出结论:
Dir
对象不是IO
Dir
不继承IO类,只能读取。仍然不确定为什么在IOError
上引发了#close
。
Dir
是一个流类Dir的对象是表示底层文件系统中目录的目录流。
另外,如果您检查Dir#close
dirclose
,您会看到它调用C函数man dirclose
。 closedir()
打印:
dirp
函数关闭与之关联的目录流closedir()
。成功调用dirp
也会关闭基础文件 与dirp
关联的描述符。目录流描述符dirp
在此次通话后无法使用。
... Dir
是一个参数。
是的,实例化Dir
s 将打开一个流,是的,{{1}} s将使用文件描述符,如果你不想依赖需要关闭垃圾收集。
非常感谢 injekt 以及其他#ruby-lang irc!