module function Kernel.#open
open(file, mode = "r", perm = 0666) -> IO
open(file, mode = "r", perm = 0666) {|io| ... } -> object
-
file をオープンして、IO(Fileを含む)クラスのインスタンスを返します。
ブロックが与えられた場合、指定されたファイルをオープンし、 生成した IO オブジェクトを引数としてブロックを実行します。 ブロックの終了時や例外によりブロックを脱出するとき、 ファイルをクローズします。ブロックを評価した結果を返します。
ファイル名 file が `|' で始まる時には続く文字列をコマンドとして起動し、 コマンドの標準入出力に対してパイプラインを生成します
ファイル名が "|-" である時、open は Ruby の子プロセス を生成し、その子プロセスとの間のパイプ(IOオブジェクト)を返し ます。(このときの動作は、IO.popen と同じです。 File.open にはパイプラインを生成する機能はありません)。
Perlと異なりコマンドは常に `|' で始まります。
- [PARAM] file:
- ファイルを文字列で指定します。整数を指定した場合はファイルディスクリプタとして扱います。
- [PARAM] mode:
- モードを文字列か定数の論理和で指定します。後述。
- [PARAM] perm:
- open(2) の第 3 引数のように、ファイルを生成する場合の ファイルのパーミッションを整数で指定します。
- [EXCEPTION] Errno::EXXX:
- ファイルのオープンに失敗した場合に発生します。
[SEE_ALSO] File.open,IO.popen,IO.open
第二引数のオープンモード・エンコーディング
文字列("mode" か "mode:ext_enc" か "mode:ext_enc:int_enc" という形式)か 整数(File::Constants モジュールの定数の論理和)を組み合わせて指定します。
mode は以下の三つのうちのいずれかです。
- "r", RDONLY
-
ファイルを読み込みモードでオープンします。(デフォルトのモード)
- "w", WRONLY|CREAT|TRUNC
-
ファイルを書き込みモードでオープンします。 オープン時にファイルがすでに存在していれば その内容を空にします。
- "a", WRONLY|CREAT|APPEND
-
ファイルを書き込みモードでオープンします。 出力は 常に ファイルの末尾に追加されます。 例えば、ファイルオープン中にファイルのサイズが小さ くなってもその末尾に出力されます。
以上の3つの後に "+" があれば、ファイルは読み書き両用モード (RDWR) でオープンされます。
- "r+"
-
ファイルの読み書き位置は先頭にセットされます。
- "w+"
-
"r+" と同じですが、オープン時にファイルがすでに 存在していればその内容を空にします。
- "a+"
-
"r+"と同様、ファイルの読み込み位置は先頭にセットされますが、 書き込みは常にファイル末尾に行われます。書き込みは IO#seek などの影響を受けません。
これらのいずれに対しても "b" フラグを ("r+b"のように) つけることがで きます (整数なら File::BINARY )。この場合、バイナリモードでオープン します (ただし、DOS/Windowsのようにシステムがテキスト/バイナリでファイルを区別する場 合に限ります)
open(name, mode = 'r', perm = nil, options = {}) -> StringIO | File
[redefined by open-uri]open(name, mode = 'r', perm = nil, options = {}) {|ouri| ...} -> nil
[redefined by open-uri]-
name が http:// や ftp:// で始まっている文字列なら URI のリソースを 取得した上で StringIO オブジェクトとして返します。 StringIO オブジェクトは OpenURI::Meta モジュールで extend されています。
name に open メソッドが定義されている場合は、*rest を引数として渡し name.open(*rest, &block) のように name の open メソッドが呼ばれます。
これ以外の場合は、name はファイル名として扱われ、従来の Kernel.#open(name, *rest) が呼ばれます。
ブロックを与えた場合は上の場合と同様、name が http:// や ftp:// で 始まっている文字列なら URI のリソースを取得した上で StringIO オブジェクトを 引数としてブロックを評価します。後は同様です。 StringIO オブジェクトは OpenURI::Meta モジュールで extend されています。
- [PARAM] name:
- オープンしたいリソースを文字列で与えます。
- [PARAM] mode:
- モードを文字列で与えます。Kernel.#open と同じです。
- [PARAM] perm:
- open(2) の第 3 引数のように、ファイルを生成する場合のファイルのパーミッションを 整数で指定します。Kernel.#open と同じです
- [PARAM] options:
- ハッシュを与えます。詳しくは OpenURI.open_uri を参照してください。
- [EXCEPTION] OpenURI::HTTPError:
- 対象となる URI のスキームが http であり、 かつリソースの取得に失敗した時に発生します。
- [EXCEPTION] Net::FTPError:
- 対象となる URI のスキームが ftp であり、かつリソースの取得に失敗した時に Net::FTPError のサブクラスが発生します。詳しくは net/ftp を参照して下さい。
例:
require 'open-uri' sio = open('http://www.example.com') p sio.is_a?(OpenURI::Meta) # => true p sio.content_type puts sio.read
[SEE_ALSO] OpenURI.open_uri