📜  Elixir-文件IO

📅  最后修改于: 2020-11-04 05:32:09             🧑  作者: Mango


文件IO是任何编程语言的组成部分,因为它允许该语言与文件系统上的文件进行交互。在本章中,我们将讨论两个模块-路径和文件。

路径模块

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

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

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

运行上述程序时,将产生以下结果-

foo/bar

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

文件模块

文件模块包含允许我们将文件作为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 

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

开启档案

要打开文件,我们可以使用以下2个功能之一-

{: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])

写入文件

我们有两种写入文件的方式。让我们使用文件模块中的写入函数来查看第一个。

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模块方法(例如IO.writeIO.binwrite)写入以io_device打开的文件。

从文件读取

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

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

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

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

关闭打开的文件

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

File.close(file)