【问题标题】:How to test what type of mode a Ruby File was opened in?如何测试打开 Ruby 文件的模式类型?
【发布时间】:2012-12-05 03:32:27
【问题描述】:

假设您收到了一个打开的 File 对象,但您不知道它是以什么类型的模式打开的(例如 'r'、'w'、'w+')。

您将如何确定文件以哪种模式打开?

据我所知,没有IO 方法可以解决这个问题,但我可能会遗漏一些东西。

如果需要为每种模式编写单独的测试,那么理想情况下,它应该是一个不会修改指针位置(或文件内容)的单一方法或一个衬垫 if 语句。

【问题讨论】:

  • 我知道的唯一明显的是IO#binmode?;除了@Arcturus 建议的异常测试之外,我对写入/读取一无所知。

标签: ruby file-io io


【解决方案1】:

您可以尝试以下任何一种:

  • 将单个字符写入文件描述符,然后取消查找;如果成功,则处于写入模式,否则会引发异常。

  • 尝试并收集fstat 方法的信息。

【讨论】:

  • 为了确定,fstat 是指File::stat
  • 我不确定确切的 Ruby 函数调用; fstat() 是与 stat() 做同样事情的系统调用,但使用文件描述符,而不是文件名。
【解决方案2】:

Ruby File 对象有以下方法:

File(filename).readable?
File(filename).writeable?
File(filename).executeable?

【讨论】:

  • 据我所知,readable?writable? 测试用户是否有权限,而不是使用 File.open('testfile.txt' 'w+') 打开特定对象。如果我错了,请纠正我。
猜你喜欢
  • 1970-01-01
  • 2020-01-31
  • 1970-01-01
  • 2012-08-12
  • 2023-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多