Elixir-ファイルIO
ファイルIOは、言語がファイルシステム上のファイルと対話できるようにするため、プログラミング言語の不可欠な部分です。この章では、パスとファイルの2つのモジュールについて説明します。
パスモジュール
ザ・ pathmoduleは非常に小さなモジュールであり、ファイルシステム操作のヘルパーモジュールと見なすことができます。Fileモジュールの関数の大部分は、パスを引数として想定しています。最も一般的には、これらのパスは通常のバイナリになります。パスモジュールは、そのようなパスを操作するための機能を提供します。Pathモジュールはさまざまなオペレーティングシステムを透過的に処理するため、バイナリを操作するだけでなく、Pathモジュールの関数を使用することをお勧めします。Elixirは、ファイル操作を実行するときに、Windowsでスラッシュ(/)をバックスラッシュ(\)に自動的に変換することに注意してください。
パスモジュールをさらに理解するために、次の例を考えてみましょう。
IO.puts(Path.join("foo", "bar"))
上記のプログラムを実行すると、次の結果が生成されます-
foo/bar
パスモジュールが提供するメソッドはたくさんあります。ここでさまざまな方法を見ることができます。これらのメソッドは、多くのファイル操作操作を実行している場合に頻繁に使用されます。
ファイルモジュール
ファイルモジュールには、ファイルをIOデバイスとして開くことができる関数が含まれています。デフォルトでは、ファイルはバイナリモードで開かれるため、開発者は特定のファイルを使用する必要がありますIO.binread そして IO.binwriteIOモジュールから機能します。というファイルを作成しましょう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関数は常にタプルを返します。ファイルが正常に開かれると、タプルの最初の値が次のように返されます。:ok2番目の値はタイプio_deviceのリテラルです。エラーが発生した場合、最初の値が次のようなタプルが返されます。:error 理由として2番目の値。
ザ・ File.open!() 一方、関数は io_deviceファイルが正常に開かれた場合、それ以外の場合はエラーが発生します。注:これは、これから説明するすべてのファイルモジュール関数で使用されるパターンです。
このファイルを開くモードを指定することもできます。ファイルを読み取り専用でutf-8エンコードモードで開くには、次のコードを使用します-
file = File.open!("newfile", [:read, :utf8])
ファイルへの書き込み
ファイルに書き込む方法は2つあります。Fileモジュールのwrite関数を使用した最初のものを見てみましょう。
File.write("newfile", "Hello")
ただし、同じファイルに複数の書き込みを行う場合は、これを使用しないでください。この関数が呼び出されるたびに、ファイル記述子が開かれ、ファイルに書き込むための新しいプロセスが生成されます。ループで複数の書き込みを行う場合は、次の方法でファイルを開きます。File.openIOモジュールのメソッドを使用して書き込みます。同じことを理解するための例を考えてみましょう-
#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モジュールメソッドを使用できます IO.write そして IO.binwrite io_deviceとして開いたファイルに書き込みます。
ファイルからの読み取り
ファイルから読み取る方法は2つあります。Fileモジュールからの読み取り機能を使用した最初のものを見てみましょう。
IO.puts(File.read("newfile"))
このコードを実行すると、最初の要素が次のようになっているタプルを取得する必要があります。 :ok そして2番目はnewfileの内容として
使用することもできます File.read! 返されるファイルの内容を取得するだけの関数。
開いているファイルを閉じる
File.open関数を使用してファイルを開くときは常に、使用が終了したら、を使用してファイルを閉じる必要があります。 File.close 関数-
File.close(file)