> Erlang中文手册 > read/2 从一个文件读取数据

file:read/2

从一个文件读取数据

用法:

read(IoDevice, Number) -> {ok, Data} | eof | {error, Reason}

从文件的引用 IoDevice 读取 Number 个字节/字符的数据。函数 file:read/2、file:pread/3 和 file:read_line/1 都是只以 raw 的模式打开一个文件读取数据(虽然它们也可以以正常的模式打开文件)。

文件的编码可以设置为除了 latin1 之外的编码,在文件里一个字符也许由不只一个字节表示。参数 Number 表示从文件读取字符数据的数量,当读取一个 unicode 文件时,文件引用游标在文件里的移动位置也许是比这个数字要大很多。

如果编译设置为除了 latin1 之外的编码,那么使用函数 file:read/3 读取的数据里包含的字符大于 255,那么将读取失败,io 模块是更善于读取这类文件。

函数返回值:

{ok, Data}:如果文件是以二进制的模式,那么读取返回的数据也是二进制字节数,否则是以 list 的形式返回。如果读到了文件末尾,列表或者二进制将小于要求所需的字节数。

eof:正常读到文件末尾(Number 要大于 0 的情况下)

典型的错误原因:

ebadf:文件不能被打开读取。

{no_translation, unicode, latin1}:文件以除了 latin1 之外的编码打开,不过文件里的数据不能正常转换为这个函数返回的原始字节数据。

{ok, File} = file:open("./rebar.config", [raw, binary]),
file:read(File, 1024 * 1024).