`
DiaoCow
  • 浏览: 242741 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Erlang 文件处理(读书笔记)

阅读更多
今天看了下erlang file章节,内容感觉比较散,现在做个笔记:

文件操作主要有4个module
file : 这个模块主要提供对文件基本操作的方法(譬如,打开关闭文件,读写文件内容等等)
filename : 这个模块提供跨平台处理文件名的方法(即,你不用关心你的代码是运行在linux平台还是windows平台)
filelib : 这个模块其实是file module的扩展,它提供了一些更常用的方法(即,对file模块中一些方法进行封装,从而提供更简便方法)
io : 这个模块用来读取和写入数据

读文件
1. file:consult(Filename) -> {ok, Terms} | {error, Reason}
该方法用来从文件读取erlang terms(注意文件中的每个term要用 . 分隔,如下图)


我们使用consult方法来读取该文件:


现在我们看下consult方法的实现源码(使用code:which(file)命令查找源码位置):


其中:
file:open方法用来打开文件,其完整定义为:file:open(Filename, Modes) -> {ok, IoDevice} | {error, Reason}
file:close方法用来关闭文件,其完整定义为:file:close(IoDevice) -> ok | {error, Reason}
实现原理:通过io:read方法循环读取文件中的erlang term(每次读取一个),然后拼装到List中(注意,consult_stream方法是一个尾递归调用,因此不用担心它的效率)

2.io:get_line(IoDevice, Prompt) -> Data | eof | {error, term()}
该方法用来从IoDevice表示的输入设备中(譬如文件)读取"一行"数据,看个简单例子


3.file: read_file(Filename) -> {ok, Binary} | {error, Reason}
该方法用会将整个文件读入内存,然后以字节流(二进制)的形式返回文件内容(这是一种非常高效读取文件的一种方式,但是若内存不够,会报错


4.file:pread(IoDevice, Location, Number) -> {ok, Data} | eof | {error, Reason}
提供随机访问功能,从位置Location开始读取Number数量的字节


写文件

1.format(IoDevice, Format, Data) -> ok
这个方法很easy,就是把Data按照Format指定的输出格式,输出到IoDeveice中去(注意:IoDevice必须要以write模式打开)
常用的格式符有:~n(输出换行符),~s(输出字符串),~w与~p(输出erlang term,目前我还不清楚两者区别)

2.write_file(Filename, Bytes) -> ok | {error, Reason}
这个方法用来高效的将字节流写入文件,我们看个简单例子



目录操作
1.file模块有三个方法来操作目录,他们分别是:list_dir(Dir),mark_dir(Dir),del_dir(Dir)(只能删除空目录),我们简单看下它们的使用例子:


其中file:list_dir(".")中的. 代表当前目录

现在假设,我们需要知道一个文件(目录)的名字,创建时间,以及大小该怎么半呢? 答案:调用file:read_file_info方法即可


read_file_info返回的是一个信息全量,它的每个值代表的含义如下:


但是,通常我们只需要其中的某些或者某个值(譬如,我只想知道ebin/data.dat文件的大小),这时候,我们就需要利用record file_info,若我们需要使用这个record,则要在文件开始处引入:-include_lib("kernel/include/file.hrl"). 现在假设我们要取ebin/data.dat文件大小,则可以:


除了上面所说的方法,其实还有更简单的方式,直接调用filelib:file_size方法


书中最后一个Find Utility例子还是挺有意思,为了截图方便(一屏),我将代码重写了一遍,现在贴上来:


注意在调用file_lib:is_dir方法时,需要传入全路径名(不然它会以当前路径为相对路径),我一开始没有注意到这一点,倒置结果总是不对

现在我们运行程序并且和linux find命令比对结果:


关于erlang文件处理,就说道这里,更多api细节文档请参看:
http://www.erlang.org/doc/man/file.html
http://www.erlang.org/doc/man/filename.html
http://www.erlang.org/doc/man/filelib.html
http://www.erlang.org/doc/man/io.html
http://www.erlang.org/doc/man/re.html



  • 大小: 3.3 KB
  • 大小: 5.6 KB
  • 大小: 24 KB
  • 大小: 11.9 KB
  • 大小: 6.4 KB
  • 大小: 15.4 KB
  • 大小: 9.7 KB
  • 大小: 17 KB
  • 大小: 51.1 KB
  • 大小: 20 KB
  • 大小: 3.7 KB
  • 大小: 38.7 KB
  • 大小: 16.4 KB
分享到:
评论
1 楼 lin_464025910 2014-05-27  
Erlang 很牛逼的 开发语言, 最近才关注  性能确实 不错. 向楼主 好好学习!

相关推荐

    基于erlang的文件存储

    5. **并发处理**:Erlang的进程模型使得并发处理变得简单且高效,每个gen_server实例可以独立处理文件请求,避免了单点性能瓶颈。在高负载情况下,这种设计可以确保系统的稳定性和响应速度。 6. **分布式特性**:...

    erlang 学习笔记1

    【标题】"Erlang 学习笔记1" ..."rw_file"示例就是很好的起点,它将带你了解如何在Erlang中处理文件I/O,这是任何编程语言的基础。随着对Erlang的理解加深,你会发现它在构建高并发、分布式系统方面的强大潜力。

    Erlang 运行环境的安装文件

    此外,Erlang 还具有内置的错误处理机制,使得程序在遇到故障时能够自动恢复,增强了系统的稳定性和可靠性。 安装 Erlang 运行环境通常涉及以下步骤: 1. **下载**:访问 Erlang 官方网站 ...

    erlang 笔记

    erlang 程序设计一书的笔记,帮你快速重温erlang的知识点。

    erlang25.0 windows版本

    - **OTP(Open Telephony Platform)**:Erlang的核心库,包含大量预先设计的模块,用于处理常见的系统任务,如错误处理、分布式计算和监控。 - **行为模式**:如GenServer、GenEvent和Gen_fsm,它们定义了Erlang中...

    erlang编程 Introducing Erlang

    **Erlang编程:Introducing Erlang** Erlang是一种函数式编程语言,由爱立信在1986年开发,主要用于构建...通过阅读这本书,读者将能够理解Erlang如何处理并发、分布式计算和故障恢复,从而构建高效、健壮的软件系统。

    java版商城源码-hello-erlang:Erlang的笔记和例子

    的笔记和主要引用。 检查部分以查看我从哪里获取报价。 请注意,此 repo 始终在进行中。 (我还没找到时间完成这本书。) 话题 陷阱 erlang 没有null值这样的东西 每个函数都需要返回一些东西 erlang 不允许在函数中...

    erlang学习笔记

    erlang编程指南学习笔记,包含具体操作命令例子

    ErlangB和ErlangC计算工具(exe可执行文件+excel两个)

    Erlang B和Erlang C是电信领域中两种重要的流量模型,用于预测和分析通信系统中的呼叫处理能力和拥塞情况。这两个模型由丹麦工程师Agner Krarup Erlang在20世纪初提出,至今仍广泛应用于现代通信网络的设计与优化。 ...

    for_each_file 用erlang代码实现遍历文件

    `for_each_file`函数展示了Erlang处理文件系统的通用模式:列举文件,打开每个文件,处理内容,然后关闭文件。这个模式在处理大量文件时非常常见,可以灵活地适应各种需求,如统计、分析、转换或日志处理等。通过...

    erlang9.rar

    Erlang的强大并发处理能力和内置的分布式特性使得RabbitMQ成为处理大量并发消息的理想选择。在安装Erlang后,可以通过RabbitMQ的官方网站下载相应版本的安装包,或者从第三方源如CSDN获取,然后按照同样的方式安装。...

    erlang_版本24.3.4.4

    - **错误处理**:Erlang采用异常处理机制,鼓励编写无副作用的纯函数,有助于编写容错性强的代码。 - **模式匹配**:Erlang的模式匹配功能允许在函数定义中使用模式来匹配和解构数据结构,简化了代码编写。 - **...

    改进erlang版的protobuf代码

    要深入学习这些改进,你可以阅读`test.proto`了解数据结构,通过`test.erl`查看如何在Erlang中使用这些结构,运行`test.bat`来执行测试,同时结合博客文章理解背后的优化思想和技术细节。这样的实践将有助于你理解和...

    xiandiao_erlang_Erlang课后习题_

    "xiandiao_erlang_Erlang课后习题_"这个压缩包文件包含了Erlang程序设计第二版的课后习题源码,这对于学习和深入理解Erlang编程至关重要。 Erlang的特点: 1. **函数式编程**:Erlang基于函数式编程范式,强调无副...

    erlang 24.0 龙芯 loongarch64 预编译版本

    例如,可能改进了并发处理能力,增强了垃圾回收机制,或者对编译器和运行时系统进行了优化,使得Erlang程序在龙芯平台上运行得更加高效稳定。然而,具体的改动需要查看Erlang官方的发行说明才能得知。 总的来说,这...

    erlang relx 文件

    relx erlang 下载cowboy 时要有到的文件,在国内下载有时有问题。

    Erlang 20.3linux安装包

    1. **下载**:你可以从Erlang Solutions官网或者通过提供的压缩包文件"Erlang 20.3linux░▓╫░░ⁿ"和"Erlang 20.3linux安装包"下载Erlang的Linux二进制包。 2. **解压**:解压缩下载的文件到一个合适的目录,...

    Erlang和RabbitMQ安装包

    1. **并发性**:Erlang的轻量级进程(processes)设计允许大量并发执行,每个进程都有自己的堆栈,可以独立运行且互相隔离,这使得Erlang在处理大量并发任务时表现出色。 2. **分布式计算**:Erlang天生支持分布式...

    erlang资源

    Erlang是一种面向并发的、函数式编程语言,由瑞典...这两本书结合阅读,将为初学者提供一个全面的Erlang学习路径,从基础语法到高级并发编程技巧,有助于深入理解Erlang语言及其在构建高并发、分布式系统中的强大能力。

    erlang-20.3.6.zip

    3. 阅读README或INSTALL文件以获取具体的安装指南。 4. 可能需要执行类似`./configure`的脚本来配置安装。 5. 执行`make`编译源码。 6. 使用`sudo make install`将Erlang安装到系统路径。 7. 配置环境变量,例如在`....

Global site tag (gtag.js) - Google Analytics