Elixir - 文件 IO

文件 IO 是任何编程语言不可或缺的一部分,因为它允许该语言与文件系统上的文件进行交互。 在本章中,我们将讨论两个模块 − Path 和 File。

Path 路径模块

path模块是一个非常小的模块,可以被视为文件系统操作的辅助模块。 文件模块中的大多数函数都期望路径作为参数。 最常见的是,这些路径是常规二进制文件。 Path 模块提供了处理此类路径的工具。 首选使用 Path 模块中的函数而不是仅仅操作二进制文件,因为 Path 模块透明地处理不同的操作系统。 值得注意的是,在 Windows 上执行文件操作时,Elixir 会自动将斜杠(/)转换为反斜杠(\)。

让我们考虑以下示例来进一步了解 Path 模块 −

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

当上面的程序运行时,会产生以下结果 −

foo/bar

path模块提供了很多方法。 您可以在此处查看不同的方法 。 如果您执行许多文件操作操作,则经常使用这些方法。

File 文件模块

File 模块包含允许我们将文件作为 IO 设备打开的函数。 默认情况下,文件以二进制模式打开,这需要开发人员使用 IO 模块中特定的 IO.binreadIO.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 

现在让我们了解如何使用文件模块。

打开文件

要打开文件,我们可以使用以下两个函数之一 −

{:ok, file} = File.open("newfile")
file = File.open!("newfile")

现在让我们了解 File.open 函数和 File.open!() 函数之间的区别。

  • File.open 函数始终返回一个元组。 如果文件成功打开,它将返回元组中的第一个值作为 :ok ,第二个值是 io_device 类型的文字。 如果发生错误,它将返回一个元组,第一个值为 :error,第二个值为原因。

  • 另一方面,如果文件成功打开,File.open!() 函数将返回 io_device,否则将引发错误。 注意:这是我们将要讨论的所有文件模块函数所遵循的模式。

我们还可以指定打开该文件的模式。 要以只读方式以 utf-8 编码模式打开文件,我们使用以下代码 −

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

写入文件

我们有两种写入文件的方法。 让我们看看第一个使用文件模块中的 write 函数的情况。

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

但是如果您要对同一文件进行多次写入,则不应使用此方法。 每次调用此函数时,都会打开一个文件描述符,并生成一个新进程来写入该文件。 如果您在循环中进行多次写入,请通过 File.open 打开文件并使用 IO 模块中的方法写入。 让我们考虑一个例子来理解同样的内容 −

#以读、写和 utf8 模式打开文件。
file = File.open!("newfile_2", [:read, :utf8, :write])

#使用标准 IO 函数写入此"io_device"
IO.puts(file, "Random text")

您可以使用其他 IO 模块方法(例如 IO.writeIO.binwrite)写入作为 io_device 打开的文件。

从文件中读取

我们有两种读取文件的方法。 让我们看看第一个使用文件模块中的读取函数的情况。

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

运行此代码时,您应该得到一个元组,其中第一个元素为 :ok,第二个元素为 newfile 的内容

我们还可以使用 File.read! 函数来获取返回给我们的文件内容。

关闭打开的文件

每当使用 File.open 函数打开文件时,使用完毕后,应使用 File.close 函数关闭它 −

File.close(file)