非常教程

Erlang 20参考手册

stdlib

filelib

模块

filelib

模块摘要

文件实用程序,例如文件名的通配符匹配。

描述

此模块包含的实用程序级别高于file模块。

该模块不支持“原始”文件名(即名称不符合预期编码的文件)。这些文件被本模块中的功能忽略。

有关原始文件名的详细信息,请参阅file模块。

数据类型

filename() = file:name()

dirname() =filename()

dirname_all() =filename_all()

filename_all() = file:name_all()

find_file_rule() =

{ObjDirSuffix :: string(), SrcDirSuffix :: string()}

find_source_rule() =

{ObjExtension :: string(),

SrcExtension :: string(),

[find_file_rule()]}

输出

ensure_dir(Name) -> ok | {error, Reason}

类型

确保指定文件或目录名的所有父目录Name存在,并在必要时尝试创建它们。

如果所有父目录已经存在或可以创建,则返回ok。 如果某个父目录不存在并且无法创建,则返回{error,Reason}。

file_size(Filename) -> integer() >= 0

类型

返回指定文件的大小。

fold_files(Dir, RegExp, Recursive, Fun, AccIn) -> AccOut

类型

折叠函数有趣于目录Dir中与正则表达式RegExp匹配的所有(常规)文件F(有关允许的正则表达式的描述,请参阅re模块)。 如果递归为真,则处理Dir的所有子目录。 正则表达式匹配只在没有目录部分的文件名上完成。

如果Unicode文件名转换生效且文件系统是透明的,则可能遇到不能被解释为Unicode的文件名,在这种情况下,fun()必须准备好处理原始文件名(即二进制文件)。如果正则表达式包含的代码点大于255,则它不匹配不符合预期字符编码的文件名(即,不以有效的UTF-8编码)。

有关原始文件名的详细信息,请参阅file模块。

is_dir(Name) -> boolean()

类型

如果Name引用一个目录,则返回true,否则返回false。

is_file(Name) -> boolean()

类型

如果Name引用文件或目录,则返回true,否则返回false。

is_regular(Name) -> boolean()

类型

如果Name引用(常规)文件,则返回true,否则返回false。

last_modified(Name) -> file:date_time() | 0

类型

返回指定文件或目录上次修改的日期和时间,或者文件不存在时返回0

wildcard(Wildcard) -> file:filename()

类型

返回与Unix样式通配符字符串匹配的所有文件的列表Wildcard

通配符字符串看起来像一个普通文件名,但以下“通配符”是以一种特殊的方式解释的:

匹配一个字符。

*

匹配任意数量的字符,直到文件名末尾、下一个点或下一个斜杠。

**

两相邻*作为单一模式使用,匹配所有文件和零或多个目录和子目录。

Character1,Character2,...

匹配列出的任何字符。由连字符分隔的两个字符匹配一系列字符。示例:[A-Z]匹配任何大写字母。

{项目...}

交替。匹配其中一个替代方案。

其他字符代表自己。只有在相同位置具有完全相同字符的文件名匹配。匹配区分大小写,例如“a”与“A”不匹配。

请注意,允许多个“*”字符(如在Unix通配符中,但与Windows / DOS通配符相反)。

例子:

下面的示例假设当前目录是Erlang/OTP安装的顶部。

找到所有.beam所有应用程序中的文件,请使用以下行:

filelib:wildcard("lib/*/ebin/*.beam").

找到.erl.hrl在所有应用中src目录,请使用下列任何一行:

filelib:wildcard("lib/*/src/*.?rl")
filelib:wildcard("lib/*/src/*.{erl,hrl}")

找到所有.hrl文件在srcinclude目录:

filelib:wildcard("lib/*/{src,include}/*.hrl").

找到所有.erl.hrl文件srcinclude目录:

filelib:wildcard("lib/*/{src,include}/*.{erl,hrl}")

找到所有.erl.hrl任何子目录中的文件:

filelib:wildcard("lib/**/*.{erl,hrl}")

通配符(通配符,Cwd) - > file:filename()

类型

wildcard/1,除了Cwd用来代替工作目录。

find_file(Filename :: filename(), Dir :: filename()) ->

{ok, filename()} | {error, not_found}

find_file(Filename :: filename(),

Dir :: filename(),

Rules :: [find_file_rule()]) ->

{ok, filename()} | {error, not_found}

通过将后缀规则应用于给定的目录路径来查找给定名称的文件。例如,规则{"ebin", "src"}意味着如果目录"ebin"路径结束,"src"则应搜索结尾的相应路径。

如果Rules省略或者是空列表,则使用默认的系统规则。另请参阅内核应用程序参数source_search_rules

find_source(FilePath :: filename()) ->

{ok, filename()} | {error, not_found}

相当于find_source(Base, Dir),其中Dirfilename:dirname(FilePath)Basefilename:basename(FilePath)

find_source(Filename :: filename(), Dir :: filename()) ->

{ok, filename()} | {error, not_found}

find_source(Filename :: filename(),

Dir :: filename(),

Rules :: [find_source_rule()]) ->

{ok, filename()} | {error, not_found}

应用文件扩展名特定的规则查找给定对象文件相对于对象目录的源文件。例如,对于扩展名为.beam,默认规则是查找具有相应扩展名的文件。.erl通过替换后缀"ebin"对象目录路径的"src".文件搜索是通过find_file/3对象文件的目录总是在规则指定的任何其他目录之前尝试。

如果Rules是空列表,则使用默认系统规则。还请参见内核应用程序参数。source_search_rules...

Erlang 20

Erlang 是一种通用的面向并发的编程语言,可应付大规模开发活动的程序设计语言和运行环境。

主页 https://www.erlang.org/
源码 https://github.com/erlang/otp
版本 20
发布版本 20.1