Elixir-file-io

提供:Dev Guides
移動先:案内検索

Elixir-ファイルIO

ファイルIOは、プログラミング言語がファイルシステム上のファイルと対話できるようにするため、あらゆるプログラミング言語の不可欠な部分です。 この章では、パスとファイルの2つのモジュールについて説明します。

パスモジュール

*path* モジュールは、ファイルシステム操作のヘルパーモジュールと見なすことができる非常に小さなモジュールです。 Fileモジュールの大部分の関数は、引数としてパスを必要とします。 最も一般的には、これらのパスは通常のバイナリになります。 Pathモジュールは、そのようなパスを操作するための機能を提供します。 Pathモジュールはさまざまなオペレーティングシステムを透過的に処理するため、単にバイナリを操作するのではなく、Pathモジュールの関数を使用することをお勧めします。 Elixirは、ファイル操作を実行するときにWindowsでスラッシュ(/)をバックスラッシュ(\)に自動的に変換することに注意してください。

Pathモジュールをさらに理解するために、次の例を考えてみましょう-

IO.puts(Path.join("foo", "bar"))

上記のプログラムが実行されると、次の結果が生成されます-

foo/bar

パスモジュールが提供する多くのメソッドがあります。 さまざまな方法については、http://elixir-lang.org/docs/stable/elixir/Pathl [こちら]をご覧ください。 これらのメソッドは、多くのファイル操作操作を実行している場合に頻繁に使用されます。

ファイルモジュール

ファイルモジュールには、IOデバイスとしてファイルを開くことができる関数が含まれています。 デフォルトでは、ファイルはバイナリモードで開かれるため、開発者はIOモジュールの特定の IO.binread および IO.binwrite 関数を使用する必要があります。 newfile というファイルを作成し、それにデータを書き込みましょう。

{:ok, file} = File.read("newfile", [:write])
# Pattern matching to store returned stream
IO.binwrite(file, "This will be written to the file")

私たちが書いたばかりのファイルを開くと、コンテンツは次のように表示されます-

This will be written to the file

ファイルモジュールの使用方法を理解しましょう。

ファイルを開く

ファイルを開くには、次の2つの機能のいずれかを使用できます-

{:ok, file} = File.open("newfile")
file = File.open!("newfile")
*File.open* 関数と* File.open!()*関数の違いを理解しましょう。
  • File.open 関数は常にタプルを返します。 ファイルが正常に開かれた場合、タプルの最初の値を*:ok ​​として返し、2番目の値はio_device型のリテラルです。 エラーが発生した場合、最初の値が:error *で2番目の値が理由としてタプルを返します。
  • 一方、* File.open!()関数は、ファイルが正常に開かれた場合は *io_device を返し、それ以外の場合はエラーを発生させます。 注:これは、これから説明するすべてのファイルモジュール関数で使用されるパターンです。

このファイルを開くモードを指定することもできます。 ファイルを読み取り専用で、utf-8エンコーディングモードで開くには、次のコードを使用します-

file = File.open!("newfile", [:read, :utf8])

ファイルへの書き込み

ファイルに書き込む方法は2つあります。 Fileモジュールのwrite関数を使用した最初のものを見てみましょう。

File.write("newfile", "Hello")

ただし、同じファイルに複数の書き込みを行う場合は、これを使用しないでください。 この関数が呼び出されるたびに、ファイル記述子が開かれ、ファイルに書き込むための新しいプロセスが生成されます。 ループで複数の書き込みを行う場合は、 File.open を介してファイルを開き、IOモジュールのメソッドを使用して書き込みます。 同じことを理解するための例を考えてみましょう-

#Open the file in read, write and utf8 modes.
file = File.open!("newfile_2", [:read, :utf8, :write])

#Write to this "io_device" using standard IO functions
IO.puts(file, "Random text")
*IO.write* や *IO.binwrite* などの他のIOモジュールメソッドを使用して、io_deviceとして開かれたファイルに書き込むことができます。

ファイルからの読み取り

ファイルから読み取る方法は2つあります。 Fileモジュールのread関数を使用して、最初のものを見てみましょう。

IO.puts(File.read("newfile"))

このコードを実行すると、最初の要素が*:ok *​​で、2番目の要素がnewfileの内容であるタプルを取得する必要があります

  • File.read!*関数を使用して、返されたファイルの内容を取得することもできます。

開いているファイルを閉じる

File.open関数を使用してファイルを開くときは、使用後、 File.close 関数を使用してファイルを閉じる必要があります-

File.close(file)