本文简要介绍ruby语言中 IO.new
的用法。
用法
new(fd [, mode] [, opt]) → io
为给定的整数文件说明符 fd
和 mode
字符串返回一个新的 IO
对象(流)。 opt
可用于以更易读的方式指定mode
的部分。另请参见 IO.sysopen
和 IO.for_fd
。
IO.new
由各种 File
和 IO
打开方法调用,例如 IO::open
、 Kernel#open
和 File::open
。
开放模式
当 mode
是整数时,它必须是在 File::Constants
( File::RDONLY
, File::WRONLY|File::CREAT
) 中定义的模式的组合。有关更多信息,请参见 open(2) 手册页。
当mode
是字符串时,它必须是以下形式之一:
fmode fmode ":" ext_enc fmode ":" ext_enc ":" int_enc fmode ":" "BOM|UTF-*"
fmode
是 IO
开放模式字符串,ext_enc
是 IO
的外部编码,int_enc
是内部编码。
IO
打开模式
Ruby 允许以下打开模式:
"r" Read-only, starts at beginning of file (default mode). "r+" Read-write, starts at beginning of file. "w" Write-only, truncates existing file to zero length or creates a new file for writing. "w+" Read-write, truncates existing file to zero length or creates a new file for reading and writing. "a" Write-only, each write call appends data at end of file. Creates a new file for writing if file does not exist. "a+" Read-write, each write call appends data at end of file. Creates a new file for reading and writing if file does not exist.
以下模式必须单独使用,并与上述一种或多种模式一起使用。
"b" Binary file mode Suppresses EOL <-> CRLF conversion on Windows. And sets external encoding to ASCII-8BIT unless explicitly specified. "t" Text file mode
独占访问模式(“x”)可以与“w”一起使用,以确保文件被创建。 Errno::EEXIST 在它已经存在时引发。它可能不支持所有类型的流(例如管道)。
原 IO
的打开方式为只读时,不能改为可写方式。同样,打开模式不能从只写变为可读。
当尝试进行此类更改时,会根据平台在不同位置引发错误。
IO
Encoding
当指定ext_enc
时,读取的字符串会在读取时被编码标记,而输出的字符串会在写入时转换为指定的编码。
当指定ext_enc
和int_enc
时,输入时读取字符串将从ext_enc
转换为int_enc
,输出时将写入字符串从int_enc
转换为ext_enc
。有关输入和输出转码的更多详细信息,请参阅 Encoding
。
如果使用 “BOM|UTF-8”、“BOM|UTF-16LE” 或 “BOM|UTF16-BE”,Ruby 会检查输入文档中的 Unicode BOM 以帮助确定编码。对于 UTF-16 编码,文件打开模式必须是二进制的。当存在时,将剥离 BOM 并使用 BOM 中的外部编码。当 BOM 丢失时,给定的 Unicode 编码用作 ext_enc
。 (BOM-set 编码选项不区分大小写,因此“bom|utf-8” 也是有效的。)
选项
可以使用opt
代替mode
以提高可读性。支持以下键:
- :模式
-
与
mode
参数相同 - :标志
-
将文件打开标志指定为整数。如果给定
mode
参数,则该参数将为bitwise-ORed。 - :external_encoding
-
IO
的外部编码。 - :internal_encoding
-
IO
的内部编码。 “-” 是默认内部编码的同义词。如果值为
nil
,则不会发生转换。 - :编码
-
将外部和内部编码指定为 “extern:intern”。
- :文本模式
-
如果该值为真值,则与参数
mode
中的 “t” 相同。 - :binmode
-
如果该值为真值,则与参数
mode
中的 “b” 相同。 - :自动关闭
-
如果值为
false
,则fd
将在此IO
实例完成后保持打开状态。
此外,opt
可以在 String#encode
中具有相同的键,用于控制外部编码和内部编码之间的转换。
示例 1
fd = IO.sysopen("/dev/tty", "w")
a = IO.new(fd,"w")
$stderr.puts "Hello"
a.puts "World"
产生:
Hello
World
示例 2
require 'fcntl'
fd = STDERR.fcntl(Fcntl::F_DUPFD)
io = IO.new(fd, mode: 'w:UTF-16LE', cr_newline: true)
io.puts "Hello, World!"
fd = STDERR.fcntl(Fcntl::F_DUPFD)
io = IO.new(fd, mode: 'w', cr_newline: true,
external_encoding: Encoding::UTF_16LE)
io.puts "Hello, World!"
以上两个都打印“Hello, World!”在 UTF-16LE 到标准错误输出,将 puts
生成的 EOL 转换为 CR。
相关用法
- Ruby IO.noecho用法及代码示例
- Ruby IO.eof用法及代码示例
- Ruby IO.read用法及代码示例
- Ruby IO.fileno用法及代码示例
- Ruby IO.pread用法及代码示例
- Ruby IO.raw用法及代码示例
- Ruby IO.readlines用法及代码示例
- Ruby IO.to_i用法及代码示例
- Ruby IO.self << object用法及代码示例
- Ruby IO.tty?用法及代码示例
- Ruby IO.close_write用法及代码示例
- Ruby IO.write_nonblock用法及代码示例
- Ruby IO.set_encoding_by_bom用法及代码示例
- Ruby IO.syswrite用法及代码示例
- Ruby IO.close_read用法及代码示例
- Ruby IO.stat用法及代码示例
- Ruby IO.pwrite用法及代码示例
- Ruby IO.ungetc用法及代码示例
- Ruby IO.sysopen用法及代码示例
- Ruby IO.try_convert用法及代码示例
- Ruby IO.write用法及代码示例
- Ruby IO.pathconf用法及代码示例
- Ruby IO.sysseek用法及代码示例
- Ruby IO.closed?用法及代码示例
- Ruby IO.sync =用法及代码示例
注:本文由纯净天空筛选整理自ruby-lang.org大神的英文原创作品 IO.new。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。