欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Erlang模块file翻译

程序员文章站 2022-03-02 09:13:23
模块摘要 文件接口模块 描述 模块file提供了文件系统的接口。 在具有线程支持的操作系统上,可以让文件操作以其自己的线程执行,从而允许其他Erlang进程与文件操作并行地继续执行。在ERL(1)查看命令行标记 +A。 Erlang虚拟机在一定程度上支持Unicode的文件名。根据VM的启动方式(使 ......
模块摘要
    文件接口模块
 
描述
    模块file提供了文件系统的接口。
    在具有线程支持的操作系统上,可以让文件操作以其自己的线程执行,从而允许其他Erlang进程与文件操作并行地继续执行。在ERL(1)查看命令行标记 +A。
    Erlang虚拟机在一定程度上支持Unicode的文件名。根据VM的启动方式(使用参数 + fnu或+ fnl),给定的文件名可以包含大于255的字符,VM系统会将文件名来回转换为本地文件名编码。
    Unicode字符转换的默认行为取决于底层操作系统/文件系统强制执行一致命名的程度。在确保所有文件名都采用一种或另一种编码的操作系统上,Unicode是默认值(目前这适用于Windows和MacOSX)。在具有完全透明文件命名的操作系统上(即除MacOSX以外的所有Unix),ISO-latin-1文件命名是默认的。ISO-latin-1默认的原因是文件名不能保证可以根据预期的Unicode编码进行解释(即UTF-8),并且不能解码的文件名只能通过使用“raw文件名“,其他文件名称为二进制文件。
    由于文件名通常不是Erlang中的二进制文件,因此需要转换需要处理原始文件名的应用程序,这就是为什么文件名的Unicode模式在具有完全透明文件命名的系统上不是默认值。
    原始文件名是OTP R14B01中的一项新功能,它允许用户将完全未解释的文件名提供给底层操作系统/文件系统。它们以二进制文件形式提供,用户可以根据环境提供正确的编码。函数file:native_name_encoding()可用于检查虚拟机正在工作的编码。如果该函数返回latin1文件名不会以任何方式转换为Unicode,如果它是utf8,如果原始文件名要遵循VM的约定(通常也是OS的约定),则应将其编码为UTF-8。如果您的文件系统具有不一致的文件命名,则使用原始文件名非常有用,其中一些文件以UTF-8编码命名,而其他文件则不以此命名。当虚拟机处于Unicode文件名模式时,这种混合文件名系统上file:list_dir可能会将文件名作为原始二进制文件返回,因为它们不能被解释为Unicode文件名。即使虚拟机未以Unicode文件名翻译模式启动,原始文件名也可用于提供UTF-8编码的文件名。
    请注意,在Windows上,即使在Windows上,file:native_name_encoding()也会在默认情况下返回utf8,即使在Windows上也是原始文件名的格式,但底层操作系统特定的代码在小尾数UTF16的限制版本中工作。就Erlang程序员而言,Windows原生Unicode格式是UTF-8 ...
 
数据类型
deep_list() = [char()| atom()| deep_list() ]
FD()
    表示以原始模式打开的文件的文件描述符。
filename() = string()
filename_all() = string()| binary()
io_device() = pid()| FD()
    由file:open/2文件; pid()是一个处理I/O协议的进程。
name() = string()| atom()| deep_list()
    如果VM处于Unicode文件名模式,则string()和char() 允许大于255。
name_all() = string()| atom()| deep_list()| (RawFilename :: binary())
    如果VM处于Unicode文件名模式,string()和char() 允许大于255. RawFilename是不受Unicode转换影响的文件名,这意味着它可以包含不符合文件系统期望的Unicode编码的字符尽管虚拟机在Unicode文件名模式下启动,但是不支持UTF-8字符)。 
posix() = eacces
        | eagain
        | ebadf
        | ebusy
        | edquot
        | eexist
        | efault
        | efbig
        | eintr
        | einval
        | eio
        | eisdir
        | eloop
        | emfile
        | emlink
        | enametoolong
        | enfile
        | enodev
        | enoent
        | enomem
        | enospc
        | enotblk
        | enotdir
        | enotsup
        | enxio
        | eperm
        | epipe
        | erofs
        | espipe
        | esrch
        | estale
        | exdev
    一个由Unix中使用的POSIX错误代码以及大多数C编译器的运行时库中命名的原子。
date_time() = calendar:datetime()
    必须表示有效的日期和时间。

file_info() =
    #file_info{size = undefined | integer() >= 0,
               type = undefined
                     | device
                     | directory
                     | other
                     | regular
                     | symlink,
               access = undefined
                       | read
                       | write
                       | read_write
                       | none,
               atime = undefined
                      | file:date_time()
                      | integer() >= 0,
               mtime = undefined
                      | file:date_time()
                      | integer() >= 0,
               ctime = undefined
                      | file:date_time()
                      | integer() >= 0,
               mode = undefined | integer() >= 0,
               links = undefined | integer() >= 0,
               major_device = undefined | integer() >= 0,
               minor_device = undefined | integer() >= 0,
               inode = undefined | integer() >= 0,
               uid = undefined | integer() >= 0,
               gid = undefined | integer() >= 0}
location() = integer()
           | {bof, Offset :: integer()}
           | {cur, Offset :: integer()}
           | {eof, Offset :: integer()}
           | bof
           | cur
           | eof
mode() = read
       | write
       | append
       | exclusive
       | raw
       | binary
       | {delayed_write,
          Size :: integer() >= 0,
          Delay :: integer() >= 0}
       | delayed_write
       | {read_ahead, Size :: integer() >= 1}
       | read_ahead
       | compressed
       | {encoding, unicode:encoding()}
file_info_option() = {time, local} | {time, universal} | {time, posix}
 
导出
advise(IoDevice, Offset, Length, Advise) -> ok | {error, Reason}
    Types:
        IoDevice = io_device()
        Offset = Length = integer()
        Advise = posix_file_advise()
        Reason = posix() | badarg
        posix_file_advise() = normal
                    | sequential
                    | random
                    | no_reuse
                    | will_need
                    | dont_need
    advise/4可用于宣布将来以特定模式访问文件数据的意图,从而允许操作系统执行适当的优化。
    在某些平台上,此功能可能不起作用。

allocate(File, Offset, Length) -> ok | {error, posix()}
    Types:
        File = io_device()
        Offset = Length = integer() >= 0
    allocate/3可用于为文件预分配空间。
    此功能仅在实现此功能的平台上成功。成功时,为文件预分配空间,但文件大小可能不会更新。这种行为取决于预分配实现。为了保证文件大小更新,必须将文件截断为新的大小。

change_group(Filename, Gid) -> ok | {error, Reason}
    Types:
        Filename = name_all()
        Gid = integer()
        Reason = posix() | badarg
    更改文件组。请参阅 write_file_info/2。

change_mode(Filename, Mode) -> ok | {error, Reason}
    Types:
        Filename = name_all()
        Mode = integer()
        Reason = posix() | badarg
    更改文件的权限。请参阅 write_file_info/2。

change_owner(Filename, Uid) -> ok | {error, Reason}
    Types:
        Filename = name_all()
        Uid = integer()
        Reason = posix() | badarg
    更改文件的所有者和组。请参阅 write_file_info/2。

change_time(Filename, Mtime) -> ok | {error, Reason}
    Types:
        Filename = name_all()
        Mtime = date_time()
        Reason = posix() | badarg
    更改文件的修改和访问时间。请参阅 write_file_info/2。

close(IoDevice) -> ok | {error, Reason}
    Types:
        IoDevice = io_device()
        Reason = posix() | badarg | terminated
    关闭IoDevice引用的文件。它通常会返回正常,预计会出现诸如内存不足等严重错误。
    请注意,如果在打开文件时使用了选项delayed_write,则close/1可能会返回旧的写入错误,甚至不会尝试关闭该文件。见open/2。

consult(Filename) -> {ok, Terms} | {error, Reason}
    Types:
        Filename = name_all()
        Terms = [term()]
        Reason = posix()
       | badarg
       | terminated
       | system_limit
       | {Line :: integer(), Mod :: module(), Term :: term()}
    从Filename中读取由'.'分隔的Erlang项 。返回以下内容之一:
    {ok,Terms}
        该文件已成功读取。
    {error,atom()}
        打开文件或读取文件时发生错误。有关典型错误代码的列表,请参阅open/2。
    {error,{Line,Mod,Term}}
        解释文件中的Erlang项时发生错误。使用format_error/1将三元素元组转换为错误的英文描述。
    例子:
    f.txt:  {person, "kalle", 25}.
            {person, "pelle", 30}.
    1> file:consult("f.txt").
    {ok,[{person,"kalle",25},{person,"pelle",30}]}
    文件名的编码可以通过epp(3)中描述的注释来设置。

copy(Source, Destination) -> {ok, BytesCopied} | {error, Reason}
copy(Source, Destination, ByteCount) -> {ok, BytesCopied} | {error, Reason}
    Types:
        Source = Destination = io_device() | Filename | {Filename, Modes}
        Filename = name_all()
        Modes = [mode()]
        ByteCount = integer() >= 0 | infinity
        BytesCopied = integer() >= 0
        Reason = posix() | badarg | terminated
    从Source到Destination复制ByteCount字节 。 Source和Destination是指来自例如open/2的文件名或IO设备。 ByteCount默认为infinity,表示无限数量的字节。
    Modes模式是可能模式的列表,请参阅open/2,默认为[]。
    如果Source和 Destination都指向文件名,那么这些文件分别以[read,binary] 和[write,binary]作为模式列表的预先打开,以优化副本。
    如果Source引用一个文件名,则在拷贝之前以读取模式打开,并在完成时关闭。
    如果Destination指向一个文件名,它会在复制之前以模式列表预先以写入模式打开,并在完成时关闭。
    返回{ok,BytesCopied},其中BytesCopied是实际复制的字节数,如果在源上遇到文件结尾,则可能小于ByteCount。如果操作失败, 则返回{error,Reason}。
    典型的错误原因:至于open/2,如果一个文件必须打开,以及read/2和write/2。

del_dir(Dir) -> ok | {error, Reason}
    Types:
        Dir = name_all()
        Reason = posix() | badarg
    尝试删除目录Dir。该目录在被删除之前必须是空的。成功返回ok。
    典型的错误原因是:
    eacces
        Dir的父目录缺少搜索或写入权限。
    eexist
        该目录不是空的。
    enoent
        该目录不存在。
    enodir
        Dir的一个组件不是一个目录。在某些平台上,取而代之的是返回enoent。
    einval
        尝试删除当前目录。在某些平台上,eacces被返回。

delete(Filename) -> ok | {error, Reason}
    Types:
        Filename = name_all()
        Reason = posix() | badarg
    试图删除文件Filename。成功返回ok。
    典型的错误原因是:
    enoent
        该文件不存在。
    eacces
        对该文件或其父母之一缺少权限。
    eperm
        该文件是一个目录,用户不是超级用户。
    enotdir
        文件名的一个组件不是一个目录。在某些平台上,取而代之的是返回enoent。
    einval
        文件名具有不正确的类型,例如元组。
警告
    在未来的版本中,Filename参数的错误类型 可能会生成异常。

eval(Filename) -> ok | {error, Reason}
    Types:
        Filename = name_all()
        Reason = posix()
       | badarg
       | terminated
       | system_limit
       | {Line :: integer(), Mod :: module(), Term :: term()}
    读取和运算由'.'分隔的Erlang表达式(或',',一系列表达式也是一个表达式),来自 Filename。运算的实际结果不返回;文件中的任何表达式序列都必须存在,因为它的副作用。返回以下内容之一:
    ok
        该文件被读取和运算。
    {error,atom()}
        打开文件或读取文件时发生错误。有关典型错误代码的列表,请参阅open/2。
    {error,{Line,Mod,Term}}
        解释文件中的Erlang表达式时发生错误。使用format_error/1将三元素元组转换为错误的英文描述。
    文件名的编码可以通过epp(3)中描述的注释来设置。

eval(Filename, Bindings) -> ok | {error, Reason}
    Types:
        Filename = name_all()
        Bindings = erl_eval:binding_struct()
        Reason = posix()
       | badarg
       | terminated
       | system_limit
       | {Line :: integer(), Mod :: module(), Term :: term()}
    与eval/1相同,但变量绑定 Bindings用于运算。请参阅 erl_eval(3)关于变量绑定。

file_info(Filename) -> {ok, FileInfo} | {error, Reason}
    Types:
        Filename = name_all()
        FileInfo = file_info()
        Reason = posix() | badarg
    此功能已过时。 改为使用read_file_info/1,2。

format_error(Reason) -> Chars
    Types:
        Reason = posix()
       | badarg
       | terminated
       | system_limit
       | {Line :: integer(), Mod :: module(), Term :: term()}
        Chars = string()
    鉴于此模块中任何函数返回的错误原因,请返回英文错误的描述性字符串。

get_cwd() -> {ok, Dir} | {error, Reason}
    Types:
        Dir = filename()
        Reason = posix()
    返回{ok,Dir},其中Dir 是文件服务器的当前工作目录。
注意
    在极少数情况下,这个函数可能在Unix上失败。如果当前目录的父目录不存在读取权限,则可能发生这种情况。
    典型的错误原因是:
    eacces
        缺少当前目录的其中一个父项的读取权限。

get_cwd(Drive) -> {ok, Dir} | {error, Reason}
    Types:
        Drive = string()
        Dir = filename()
        Reason = posix() | badarg
    驱动器的格式应为“ Letter:”,例如“c:”。返回{ok,Dir}或 {error,Reason},其中Dir 是指定驱动器的当前工作目录。
    该函数在没有当前驱动器概念的平台(例如Unix)上返回{error,enotsup}。
    典型的错误原因是:
    enotsup
        操作系统没有驱动器的概念。
    eacces
        该驱动器不存在。
    einval
        云端硬盘的格式无效。

list_dir(Dir) -> {ok, Filenames} | {error, Reason}
    Types:
        Dir = name_all()
        Filenames = [filename()]
        Reason = posix()
       | badarg
       | {no_translation, Filename :: unicode:latin1_binary()}
    列出目录中的所有文件,但具有“原始”名称的文件除外。如果成功,返回 {ok,Filenames}。否则,它返回{error,Reason}。 文件名是目录中所有文件名称的列表。名称没有排序。
    典型的错误原因是:
    eacces
        Dir或其父目录之一缺少搜索或写入权限。
    enoent
        该目录不存在。
    {no_translation,Filename}
        Filename是一个二进制,其字符在ISO-latin-1中编码,VM以参数+ fnue启动。

list_dir_all(Dir) -> {ok, Filenames} | {error, Reason}
    Types:
        Dir = name_all()
        Filenames = [filename_all()]
        Reason = posix() | badarg
    列出目录中的所有文件,包括具有“原始”名称的文件。如果成功,返回{ok,Filenames}。否则,它返回{error,Reason}。 文件名是目录中所有文件名称的列表。名称没有排序。
    典型的错误原因是:
    eacces
        Dir或其父目录之一缺少搜索或写入权限。
    enoent
        该目录不存在。

make_dir(Dir) -> ok | {error, Reason}
    Types:
        Dir = name_all()
        Reason = posix() | badarg
    尝试创建目录Dir。缺少父目录不能创建。成功返回ok。
    典型的错误原因是:
    eacces
        Dir的父目录缺少搜索或写入权限。
    eexist
        已经有一个名为Dir的文件或目录。
    enoent
        Dir的一个组件不存在。
    enospc
        设备上没有剩余空间。
    enotdir
        Dir的一个组件不是一个目录。在某些平台上,取而代之的是返回enoent。

make_link(Existing, New) -> ok | {error, Reason}
    Types:
        Existing = New = name_all()
        Reason = posix() | badarg
    在支持链接的平台(Unix和Windows)上建立从Existing到 New的硬链接。如果链接成功创建,该函数返回ok,或 {error,Reason}。在不支持链接的平台上,返回{error,enotsup}。
    典型的错误原因:
    eacces
        缺少Existing或 New的父目录的读取或写入权限。
    eexist
        新已经存在。
    enosup
        该平台不支持硬链接。

make_symlink(Existing, New) -> ok | {error, Reason}
    Types:
        Existing = New = name_all()
        Reason = posix() | badarg
    在支持符号链接(大多数Unix系统和Windows以Vista开头)的平台上,该函数创建一个文件或目录Existing的新符号链接。 Existing需要不存在。如果链接成功创建,该函数返回ok,或{error,Reason}。在不支持符号链接的平台上, 返回{error,enotsup}。
    典型的错误原因:
    eacces
        缺少Existing或New的父目录的读取或写入权限。
    eexist
        新已经存在。
    enotsup
        此平台不支持符号链接。

native_name_encoding() -> latin1 | utf8
    此函数返回配置的默认文件名编码以用于原始文件名。通常,提供文件名raw(作为二进制文件)的应用程序应该服从由该函数返回的字符编码。
    默认情况下,VM在文件系统和/或使用完全透明文件命名的操作系统上使用ISO-latin-1文件名编码。这包括除MacOSX之外的所有Unix版本,其中vfs层强制执行UTF-8文件命名。通过在启动Erlang时给出实验选项+ fnu,即使对于那些系统,也可以打开文件名的UTF-8转换。如果Unicode文件名翻译生效,只要文件名符合编码,系统就会照常运行,但会返回未正确编码为UTF-8的文件名作为原始文件名(即二进制文件)。
    在Windows上,该函数默认返回utf8。操作系统使用纯粹的Unicode命名方案,文件名总是可以解释为有效的Unicode。底层Windows操作系统实际上使用小尾数UTF-16编码文件名的事实可以被Erlang程序员忽略。Windows和MacOSX是虚拟机默认以Unicode文件名模式运行的唯一操作系统。

open(File, Modes) -> {ok, IoDevice} | {error, Reason}
    Types:
        File = Filename | iodata()
        Filename = name_all()
        Modes = [mode() | ram]
        IoDevice = io_device()
        Reason = posix() | badarg | system_limit
    以由Modes确定的模式打开文件File,该模式可能包含以下一项或多项内容:
    read
        该文件必须存在,已打开供阅读。
    write
        该文件被打开写入。如果它不存在,则创建它。如果该文件存在,并且如果写入未与读取结合,则该文件将被截断。
    append
        该文件将被打开进行写入,并且如果该文件不存在,该文件将被创建。对使用append打开的文件的每个写入操作都将在文件末尾进行。
    exclusive
        如果该文件在写入时打开,则该文件如果不存在则创建。如果文件存在,打开将返回 {error,eexist}。
警告
    此选项不保证在不支持O_EXCL的文件系统上的排他性,例如NFS。除非您知道文件系统支持该选项,否则不要依赖此选项(通常,本地文件系统应该是安全的)。
    raw
        该raw选项允许一个文件更快的访问,因为不需要Erlang进程来处理文件。但是,以这种方式打开的文件具有以下限制:
        io模块中的功能无法使用,因为它们只能与Erlang进程通信。相反,使用read/2,read_line/1和 write/2 函数。
        特别是如果要在原始文件上使用read_line/1,建议将此选项与{read_ahead,Size}选项结合使用,因为面向行的I/O效率不高而不缓冲。
        只有打开文件的Erlang进程才能使用它。
        远程Erlang文件服务器不能使用; 运行Erlang节点的计算机必须能够访问文件系统(直接或通过NFS)。
    binary
        当给出这个选项时,对文件的读操作将返回二进制文件而不是列表。
    {delayed_write,Size,Delay}
        如果使用此选项,则后续write/2调用中的数据将被缓冲,直到至少有Size字节被缓冲,或者直到最早的缓冲数据为Delay毫秒。然后将所有缓冲数据写入一个操作系统调用中。在write/2执行之前,缓存的数据在其他文件操作之前也会被刷新。
        此选项的目的是通过减少操作系统调用的数量来提高性能,所以 write/2调用的尺寸应该大大小于Size,并且不会穿插其他许多文件操作,因此会发生这种情况。
        使用此选项时,write/2调用的结果可能会过早地报告为成功,并且如果实际发生写入错误,则会将错误报告为下一个文件操作的结果,该操作不会执行。
        例如,当使用delayed_write时,经过多次write/2调用后,close/1可能会返回{error,enospc},因为光盘上没有足够的空间用于先前写入的数据,并且可能再次调用close/1因为该文件仍处于打开状态。
    delayed_write
        与{Delay_write,Size,Delay}相同,使用Size和 Delay的合理默认值。(大约64 KB,2秒)
    {read_ahead, Size}
        该选项激活读取数据缓冲。如果 read/2调用的字节数大大小于Size字节,则对操作系统的读取操作仍会针对Size 字节块执行。额外的数据被缓冲并在随后的read/2调用中返回,从而减少操作系统调用次数,从而提高性能。
        所述read_ahead缓冲器也是高度由利用read_line/1在功能原始模式下,为什么建议该选项(出于性能原因)使用该函数访问原始文件时。
        如果read/2调用的大小不小于或大于size字节,则不会获得性能增益。
    read_ahead
        同为{read_ahead,Size}有一个合理的默认值大小。(大约64 KB)
    compressed
        使读取或写入gzip压缩文件成为可能。该压缩选项必须以组合读或写,但不能同时使用。请注意,使用read_file_info/1获取的文件大小 很可能与可从压缩文件读取的字节数不匹配。
    {encoding, Encoding}
        使文件自动转换特定(Unicode)编码中的字符。请注意,提供给file:write或由file:read返回的数据仍然是面向字节的,该选项仅表示数据实际存储在磁盘文件中的方式。
        根据编码的不同,读取和写入数据的方法是首选。latin1的默认编码意味着使用这个(文件)模块读取和写入数据,因为这里提供的接口使用面向字节的数据,而使用其他(Unicode)编码使得io(3)模块的get_chars,get_line和put_chars功能更适合,因为它们可以使用完整的Unicode范围。
        如果数据以无法转换为指定编码的格式发送到io_device(),或者数据是以无法应对数据字符范围的格式返回数据的函数读取的,则会发生错误,并且该文件将被关闭。
        编码的允许值是:
        LATIN1
            默认编码。提供给ie file:write的字节按原样写入文件,同样从文件读取的字节返回到ie file:read。如果使用io(3)模块进行写入,则该文件只能处理直至代码点255(ISO-latin-1范围)的Unicode字符。
        unicode或utf8
            在写入文件或从文件中读取字符之前,字符会转换为UTF-8编码或从UTF-8编码转换而来。只要没有存储在文件中的数据超出ISO-latin-1范围(0..255),以这种方式打开的文件就可以使用file:read函数读取,但如果数据包含Unicode超出该范围的码点。该文件最好使用支持Unicode的io(3)模块中的函数进行读取 。
            在实际存储到磁盘文件之前,通过任何方式写入文件的字节都会转换为UTF-8编码。
        utf16或{utf16,big}
            像unicode一样工作,但是可以在大端的UTF-16而不是UTF-8上进行翻译。
        {UTF16,little}
            像unicode一样工作,但翻译是通过小端UTF-16而不是UTF-8完成的。
        utf32或{utf32,big}
            像unicode一样工作,但是可以在大端的UTF-32而不是UTF-8上进行翻译。
        {UTF32,little}
            像unicode一样工作,但是可以使用小端UTF-32而不是UTF-8进行翻译。
        编码可以通过使用io:setopts/2函数为“即时”文件进行更改,为什么可以使用latin1编码对文件进行分析,例如BOM,位于BOM之后,然后设置为正确的编码进一步阅读。参见unicode(3)模块了解BOM的功能。
        原始文件不允许使用此选项。
    ram
        文件必须是iodata()。返回一个fd(),它使文件模块对内存中的数据进行操作,就像它是一个文件一样。
        返回:
        {ok,IoDevice}
            该文件已在请求的模式下打开。 IoDevice是对该文件的引用。
        {error, Reason}
            该文件无法打开。
        IoDevice实际上是处理文件的过程的pid。这个过程与最初打开文件的过程相关联。如果IoDevice链接的任何进程终止,则文件将被关闭,进程本身将被终止。从此调用返回的IoDevice可用作IO函数的参数(请参阅 io(3))。
        注意
            在以前版本的文件,模式都给出一个原子read,write,或read_write,而不是一个列表。出于向后兼容的原因,这仍然是允许的,但不应该用于新代码。另请注意,模式列表中不允许使用read_write。
        典型的错误原因:
        enoent
            该文件不存在。
        eacces
            缺少权限读取文件或搜索其中一个父目录。
        eisdir
            指定的文件不是常规文件。它可能是一个目录,一个fifo或一个设备。
        enotdir
            文件名的一个组件不是一个目录。在某些平台上,取而代之的是返回enoent。
        enospc
            设备上没有剩余空间(如果 指定了写访问权限)。

path_consult(Path, Filename) -> {ok, Terms, FullName} | {error, Reason}
    Types:
        Path = [Dir]
        Dir = Filename = name_all()
        Terms = [term()]
        FullName = filename_all()
        Reason = posix()
       | badarg
       | terminated
       | system_limit
       | {Line :: integer(), Mod :: module(), Term :: term()}
    搜索路径Path(目录名称列表),直到找到文件Filename。如果文件名是绝对文件名,则路径被忽略。然后从文件中读取用'.'分隔的Erlang项。返回以下内容之一:
    {ok,Terms,FullName}
        该文件已成功读取。FullName是文件的全名。
    {error,enoent}
        该文件无法在Path中的任何目录中找到 。
    {error,atom()}
        打开文件或读取文件时发生错误。有关典型错误代码的列表,请参阅open/2。
    {error,{Line,Mod,Term}}
        解释文件中的Erlang项时发生错误。使用format_error/1将三元素元组转换为错误的英文描述。
    文件名的编码可以通过epp(3)中描述的注释来设置。

path_eval(Path, Filename) -> {ok, FullName} | {error, Reason}
    Types:
        Path = [Dir :: name_all()]
        Filename = name_all()
        FullName = filename_all()
        Reason = posix()
       | badarg
       | terminated
       | system_limit
       | {Line :: integer(), Mod :: module(), Term :: term()}
    搜索路径Path(目录名称列表),直到找到文件Filename。如果文件名是绝对文件名,则路径被忽略。然后读取并运算由'.'分隔的Erlang表达式。(或',',表达式序列也是一个表达式)。运算的实际结果不返回;文件中的任何表达式序列都必须存在,因为它的副作用。返回以下内容之一:
    {ok,FullName}
        该文件被读取和运算。FullName是文件的全名。
    {error,enoent}
        该文件无法在Path中的任何目录中找到 。
    {error,atom()}
        打开文件或读取文件时发生错误。有关典型错误代码的列表,请参阅open/2。
    {error,{Line,Mod,Term}}
        解释文件中的Erlang表达式时发生错误。使用format_error/1将三元素元组转换为错误的英文描述。
    文件名的编码可以通过epp(3)中描述的注释来设置。

path_open(Path, Filename, Modes) -> {ok, IoDevice, FullName} | {error, Reason}
    Types:
        Path = [Dir :: name_all()]
        Filename = name_all()
        Modes = [mode()]
        IoDevice = io_device()
        FullName = filename_all()
        Reason = posix() | badarg | system_limit
    搜索路径Path(目录名称列表),直到找到文件Filename。如果文件名是绝对文件名,则路径被忽略。然后以Modes确定的模式打开文件。返回以下内容之一:
    {ok,IoDevice,FullName}
        该文件已在请求的模式下打开。 IoDevice是对文件的引用,FullName是文件的全名。
    {错误,enoent}
        该文件无法在Path中的任何目录中找到 。
    {error,atom()}
        该文件无法打开。

path_script(Path, Filename) -> {ok, Value, FullName} | {error, Reason}
    Types:
        Path = [Dir :: name_all()]
        Filename = name_all()
        Value = term()
        FullName = filename_all()
        Reason = posix()
       | badarg
       | terminated
       | system_limit
       | {Line :: integer(), Mod :: module(), Term :: term()}
    搜索路径Path(目录名称列表),直到找到文件Filename。如果文件名是绝对文件名,则路径被忽略。然后读取并运算由'.'分隔的Erlang表达式。(或',',表达式序列也是一个表达式)。返回以下内容之一:
    {ok,Value,FullName}
        该文件被读取和运算。全名是文件的全名值的最后一个表达式的值。
    {error,enoent}
        该文件无法在Path中的任何目录中找到 。
    {error,atom()}
        打开文件或读取文件时发生错误。有关典型错误代码的列表,请参阅open/2。
    {error,{Line,Mod,Term}}
        解释文件中的Erlang表达式时发生错误。使用format_error/1将三元素元组转换为错误的英文描述。
    文件名的编码可以通过epp(3)中描述的注释来设置。

path_script(Path, Filename) -> {ok, Value, FullName} | {error, Reason}
    Types:
        Path = [Dir :: name_all()]
        Filename = name_all()
        Value = term()
        FullName = filename_all()
        Reason = posix()
       | badarg
       | terminated
       | system_limit
       | {Line :: integer(), Mod :: module(), Term :: term()}
    搜索路径Path(目录名称列表),直到找到文件Filename。如果文件名是绝对文件名,则路径被忽略。然后读取并运算由'.'分隔的Erlang表达式。(或',',表达式序列也是一个表达式)。返回以下内容之一:
    {ok,Value,FullName}
        该文件被读取和运算。全名是文件的全名值的最后一个表达式的值。
    {error,enoent}
        该文件无法在Path中的任何目录中找到 。
    {error,atom()}
        打开文件或读取文件时发生错误。有关典型错误代码的列表,请参阅open / 2。
    {error,{Line,Mod,Term}}
        解释文件中的Erlang表达式时发生错误。使用format_error/1将三元素元组转换为错误的英文描述。
    文件名的编码可以通过epp(3)中描述的注释来设置。

path_script(Path, Filename, Bindings) -> {ok, Value, FullName} | {error, Reason}
    Types:
        Path = [Dir :: name_all()]
        Filename = name_all()
        Bindings = erl_eval:binding_struct()
        Value = term()
        FullName = filename_all()
        Reason = posix()
       | badarg
       | terminated
       | system_limit
       | {Line :: integer(), Mod :: module(), Term :: term()}
    与path_script/2相同,但在运算中使用变量绑定Bindings。请参阅 erl_eval(3)关于变量绑定。

pid2name(Pid) -> {ok, Filename} | undefined
    Types:
        Filename = filename_all()
        Pid = pid()
    如果Pid是IO设备,即从open/2返回的pid,则此函数返回文件名,或者更确切地说:
    {ok,Filename}
        如果此节点的文件服务器不是从属节点,则该节点的文件服务器将打开文件(这意味着 Pid必须是本地pid),并且该文件未关闭。文件名是字符串格式的文件名。
    undefined
        在所有其他情况下。
    警告
        该功能仅用于调试。

position(IoDevice, Location) -> {ok, NewPosition} | {error, Reason}
    Types:
        IoDevice = io_device()
        Location = location()
        NewPosition = integer()
        Reason = posix() | badarg | terminated
    将IoDevice引用的文件的位置设置为Location。如果成功,则返回 {ok,NewPosition}(作为绝对偏移量),否则返回 {error,Reason}。Location是以下之一:
    Offset
        与{bof,Offset}相同。
    {bof,Offset}
        绝对偏移量。
    {cur,Offset}
        从当前位置偏移。
    {eof,Offset}
        从文件末尾偏移。
    bof | cur | EOF
        与Offset 0 相同。
    请注意,偏移量以字节计,而不是字符。如果使用除latin1之外的其他编码打开文件,则一个字节不对应一个字符。在这样的文件中定位只能通过已知的字符边界完成,也就是说,通过获取当前位置,到文件的开始/结尾或其他某些已知位于正确字符边界的位置(通常超出文件中的字节顺序标记,它具有已知的字节大小)。
    典型的错误原因是:
    einval
        无论是位置是非法的,或在文件中其偏移量计算为负。请注意,如果结果位置为负值,则结果为错误,并且在调用后文件位置未定义。

pread(IoDevice, LocNums) -> {ok, DataL} | eof | {error, Reason}
    Types:
        IoDevice = io_device()
        LocNums = [{Location :: location(), Number :: integer() >= 0}]
        DataL = [Data]
        Data = string() | binary() | eof
        Reason = posix() | badarg | terminated
    在一次操作中执行pread/3的序列,这比一次调用它们更有效。返回{ok,[Data,...]}或 {error,Reason},其中每个Data(相应的pread的结果 )可以是列表或二进制文件,具体取决于文件的模式,或者eof,如果请求位置超出了文件结尾。
    由于位置是以字节偏移量给出的,因此在处理编码设置为latin1以外的文件时必须特别小心,因为并非每个字节位置都是此类文件上的有效字符边界。

pread(IoDevice, Location, Number) -> {ok, Data} | eof | {error, Reason}
    Types:
        IoDevice = io_device()
        Location = location()
        Number = integer() >= 0
        Data = string() | binary()
        Reason = posix() | badarg | terminated
    在一次操作中合并position/2和read/2,这比一次调用它们更有效。如果IoDevice已在原始模式下打开,则会有一些限制:位置只允许为整数; 操作后,文件的当前位置未定义。
    由于位置是以字节偏移量给出的,因此在处理编码设置为latin1以外的文件时必须特别小心,因为并非每个字节位置都是此类文件上的有效字符边界。

pwrite(IoDevice, LocBytes) -> ok | {error, {N, Reason}}
    Types:
        IoDevice = io_device()
        LocBytes = [{Location :: location(), Bytes :: iodata()}]
        N = integer() >= 0
        Reason = posix() | badarg | terminated
    在一次操作中执行一系列pwrite/3,这比一次调用一个更有效。返回ok或{error,{N,Reason}},其中 N是在失败之前完成的成功写入次数。
    当使用除latin1之外的其他编码定位文件时,必须注意将位置设置在正确的字符边界上,详情请参阅position/2。

read(IoDevice, Number) -> {ok, Data} | eof | {error, Reason}
    Types:
        IoDevice = io_device() | atom()
        Number = integer() >= 0
        Data = string() | binary()
        Reason = posix()
       | badarg
       | terminated
       | {no_translation, unicode, latin1}
    从IoDevice引用的文件读取Number字节/字符。read/2,pread/3 和read_line/1函数是从原始模式打开的文件读取的唯一方法(尽管它们也适用于通常打开的文件)。
    对于编码设置为latin1以外的文件,文件中的一个字符可能由多个字节表示。参数Number始终表示从文件中读取的字符数,为什么在读取Unicode文件时文件中的位置可能比此数字移动得多。
    另外,如果编码设置为latin1以外的其他值,如果数据包含大于255的字符,则read/3调用将失败,为什么读取此类文件时首选io(3)模块。
    该函数返回:
    {ok,Data}
        如果文件以二进制模式打开,读取的字节以二进制形式返回,否则以列表形式返回。如果文件结尾已达到,列表或二进制文件将短于请求的字节数。
    eof
        如果Number> 0和文件结尾已达到,则返回任何可以读取的内容。
    典型的错误原因:
    ebadf
        该文件未打开以供阅读。
    {no_translation,unicode,latin1}
        该文件使用另一种编码而不是latin1打开,并且文件中的数据不能转换为该函数返回的字节数据。

read_file(Filename) -> {ok, Binary} | {error, Reason}
    Types:
        Filename = name_all()
        Binary = binary()
        Reason = posix() | badarg | terminated | system_limit
    返回{ok,Binary},其中Binary是包含Filename的内容的二进制数据对象,或 {error,Reason}如果发生错误。
    典型的错误原因:
    enoent
        该文件不存在。
    eacces
        缺少的权限读取文件或者搜索其中一个父目录。
    eisdir
        指定的文件是一个目录。
    enotdir
        文件名的一个组件不是一个目录。在某些平台上,取而代之的是返回enoent。
    enomem
        文件内容没有足够的内存。

read_file_info(Filename) -> {ok, FileInfo} | {error, Reason}
read_file_info(Filename, Opts) -> {ok, FileInfo} | {error, Reason}
    Types:
        Filename = name_all()
        Opts = [file_info_option()]
        FileInfo = file_info()
        Reason = posix() | badarg
    检索有关文件的信息。如果成功则返回 {ok,FileInfo},否则返回 {error,Reason}。FileInfo 是一个记录 file_info,在内核包含文件file.hrl中定义 。在调用函数的模块中包含以下指令:
    -include_lib("kernel/include/file.hrl").
    atime,mtime和ctime中返回的时间类型 取决于Opts::{time,Type}中设置的时间类型。类型local将返回本地时间,universal将返回通用时间,posix将返回自unix time epoch(1970-01-01 00:00 UTC)之前或之后的秒数。默认是{time,local}。
    注意
        由于文件时间在大多数操作系统上以posix时间存储,因此使用posix选项查询文件信息会更快。
    记录file_info包含以下字段。
    size = integer()> = 0
        文件大小(以字节为单位)
    type = device | directory | other | regular | symlink
        文件的类型。
    access = read | write | read_write | none
        当前系统访问该文件。
    atime = date_time() | integer()> = 0
        上次读取文件时。
    mtime = date_time() | integer()> = 0
        上次写入文件的时间。
    ctime = date_time() | integer()> = 0
        这段时间的解释取决于操作系统。在Unix上,它是最后一次更改文件或inode。在Windows中,这是创建时间。
    mode = integer() >= 0
        文件权限为以下位值的总和:
        8#00400
        读取权限:所有者
        8#00200
        写权限:所有者
        8#00100
        执行权限:所有者
        8#00040
        读权限:组
        8#00020
        写入权限:组
        8#00010
        执行权限:组
        8#00004
        读权限:其他
        8#00002
        写入权限:其他
        8#00001
        执行权限:其他
        16#800
        在执行时设置用户ID
        16#400
        执行时设置组ID
        在Unix平台上,可以设置除上面列出的位之外的其他位。
    links = integer()> = 0
        文件链接的数量(对于没有链接概念的文件系统,这总是1)。
    major_device = integer()> = 0
        标识文件所在的文件系统。在Windows中,数字表示一个驱动器,如下所示:0表示A :, 1表示B :,依此类推。
    minor_device = integer()> = 0
        只对Unix上的字符设备有效。在所有其他情况下,该字段为零。
    inode = integer()> = 0
        给出inode编号。在非Unix文件系统上,此字段将为零。
    uid = integer()> = 0
        表示文件的所有者。非Unix文件系统将为零。
    gid = integer()> = 0
        给出文件所有者属于的组。对于非Unix文件系统将为零。
    典型的错误原因:
    eacces
        缺少文件父目录之一的搜索权限。
    enoent
        该文件不存在。
    enotdir
        文件名的一个组件不是一个目录。在某些平台上,取而代之的是返回enoent。

read_line(IoDevice) -> {ok, Data} | eof | {error, Reason}
    Types:
        IoDevice = io_device() | atom()
        Data = string() | binary()
        Reason = posix()
       | badarg
       | terminated
       | {no_translation, unicode, latin1}
    从IoDevice引用的文件中读取一行字节/字符 。行被定义为由换行(LF,\n)字符分隔,但任何回车符(CR,\r)后跟换行符也被视为单个LF字符(回车被忽略)。该行返回包括LF,但不包括任何紧跟着LF的CR。此行为与io:get_line/2的行为一致。如果在没有任何LF结束最后一行的情况下到达文件末尾,则返回没有尾随LF的行。
    该功能可用于以原始模式打开的文件。但是,如果未使用指定的{read_ahead,Size}选项打开文件,则在原始文件上使用它是低效的,这就是为什么在打开面向原始行读取的文本文件时强烈建议组合raw和{read_ahead,Size}。
    如果编码设置为latin1以外的其他值,如果数据包含大于255的字符,则read_line/1调用将失败,为什么读取此类文件时首选io(3)模块。
    该函数返回:
    {ok,Data}
        返回文件中的一行,包括尾随LF,但CRLF序列由单个LF替换(参见上文)。
        如果文件以二进制模式打开,读取的字节以二进制形式返回,否则以列表形式返回。
    eof
        如果在读取任何内容之前已达到文件结尾,则返回。
    {error, Reason}
        发生错误。
    典型的错误原因:
    ebadf
        该文件未打开以供阅读。
    {no_translation,unicode,latin1}
        该文件是使用除latin1之外的其他编码打开的,并且该文件上的数据无法转换为此函数返回的面向字节的数据。

read_link(Name) -> {ok, Filename} | {error, Reason}
    Types:
  &nbsp
(0)
打赏 Erlang模块file翻译 微信扫一扫

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

Erlang模块file翻译
验证码: Erlang模块file翻译