gpt4 book ai didi

Ruby 找出打开的模式文件

转载 作者:数据小太阳 更新时间:2023-10-29 08:31:37 25 4
gpt4 key购买 nike

我需要检查打开文件对象的方法。例如是 r, r+, w, a 等

thefile = File.open(filename, method)

它必须使用对象 thefile 而不仅仅是文件名。

最佳答案

在 POSIX 平台上,您可以调用 IO#fcntl使用 F_GETFL 获取文件状态标志:

require 'fcntl'

def filemode(io)
flags = io.fcntl(Fcntl::F_GETFL)
case flags & Fcntl::O_ACCMODE
when Fcntl::O_RDONLY
'r'
when Fcntl::O_WRONLY
(flags & Fcntl::O_APPEND).zero? ? 'w' : 'a'
when Fcntl::O_RDWR
(flags & Fcntl::O_APPEND).zero? ? 'r+ / w+' : 'a+'
end
end

File.open('test.txt', 'r') { |f| puts filemode(f) } #=> r
File.open('test.txt', 'w') { |f| puts filemode(f) } #=> w
File.open('test.txt', 'a+') { |f| puts filemode(f) } #=> a+

fcntl 的返回值是单个 O_* 标志的按位或:

Fcntl::O_RDONLY   # 0
Fcntl::O_WRONLY # 1
Fcntl::O_RDWR # 2
Fcntl::O_APPEND # 4
Fcntl::O_NONBLOCK # 8

Fcntl::O_ACCMODE 可用于屏蔽文件访问模式。

更多信息:

关于Ruby 找出打开的模式文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28332715/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com