Erlang文件

Erlang文件操作的基础模块是file模块

我最喜欢的一种文本文件读写方法
写列表到Erlang数据文件
{ok, S} = file:open(File, Write),
lists:foreach(fun(X)->io:format(S,"~p.~n", [X]) end, L),
file:close(S).


随机写文件
{ok, S} = file:open(File, write),
io:format(S, "~s~n", ["Hello world"]),
io:format(S, "~w~n", [1234]),
io:format(S, '~p~n", [{age,27},{name,"song"}]),
file:close(S).

读取整个Erlang数据文件,存到列表变量
{ok,List} = file:consult(File)
出错则返回 {error,Why}
列表的每一个元素在文件中以'.'分割

文件中的Erlang数据用'.'分割,形如:
{name,{{first,jason},{last,james}}}.
{address,"china shanghai"}.

-------------------------------------------------


读取整个文件,存到二进制变量
{ok, Bin} = file:read_file(File)
出错则返回 {error,Why}

将二进制数据写入整个文件
file:write_file(File, Bin)

二进制数据可转换成列表
binary_to_list(Bin)

--------------------------------------------------------
查询文件的属性
file:read_file_info(File) 返回的数据符合记录#file_info(在文件file.hrl中定义)

复制文件
file:copy(SrcFile, DestFile)

删除文件
file:delete(File)

---------------------------------
file模块有三个函数用来操纵目录,Dir可以是绝对路径活相对路径
file:list_dir(Dir)生成Dir目录下的文件列表
file:make_dir(Dir)创建一个新的目录
file:del_dir(Dir)删除一个目录


注:file:list_dir(Dir)和file:read_file_info(File)结合可以实现文件搜索/遍历功能




 

基于遗传算法的新的异构分布式系统任务调度算法研究(Matlab代码实现)内容概要:本文档围绕基于遗传算法的异构分布式系统任务调度算法展开研究,重点介绍了一种结合遗传算法的新颖优化方法,并通过Matlab代码实现验证其在复杂调度问题中的有效性。文中还涵盖了多种智能优化算法在生产调度、经济调度、车间调度、无人机路径规划、微电网优化等领域的应用案例,展示了从理论建模到仿真实现的完整流程。此外,文档系统梳理了智能优化、机器学习、路径规划、电力系统管理等多个科研方向的技术体系与实际应用场景,强调“借力”工具与创新思维在科研中的重要性。; 适合人群:具备一定Matlab编程基础,从事智能优化、自动化、电力系统、控制工程等相关领域研究的研究生及科研人员,尤其适合正在开展调度优化、路径规划或算法改进类课题的研究者; 使用场景及目标:①学习遗传算法及其他智能优化算法(如粒子群、蜣螂优化、NSGA等)在任务调度中的设计与实现;②掌握Matlab/Simulink在科研仿真中的综合应用;③获取多领域(如微电网、无人机、车间调度)的算法复现与创新思路; 阅读建议:建议按目录顺序系统浏览,重点关注算法原理与代码实现的对应关系,结合提供的网盘资源下载完整代码进行调试与复现,同时注重从已有案例中提炼可迁移的科研方法与创新路径。
你提到的“cowboy erlang 文件下载”可能是指使用 **Cowboy**(Erlang/OTP 编写的 HTTP 服务器)来实现文件下载功能。Cowboy 是一个轻量级、高性能的 Erlang Web 服务器,常用于构建 REST API 或处理 HTTP 请求。 下面是一个使用 Cowboy 实现静态文件下载的完整示例,包括路由配置、处理模块和 MIME 类型支持。 --- ### ✅ 使用 Cowboy 实现文件下载 #### 1. 项目结构(rebar3 项目) ``` my_http_server/ ├── _build/ ├── src/ │ ├── my_http_server_app.erl │ ├── my_http_server_sup.erl │ └── file_handler.erl ├── priv/ │ └── files/ │ └── example.txt % 要下载的文件 ├── rebar.config └── README.md ``` --- #### 2. `file_handler.erl` - 文件下载处理器 ```erlang -module(file_handler). -behavior(cowboy_handler). -export([init/2]). init(Req0, State) -> % 获取请求路径中的文件名 {Path, _} = cowboy_req:binding(path, Req0, <<"example.txt">>), FilePath = filename:join(["priv", "files", binary_to_list(Path)]), case file:read_file(FilePath) of {ok, Data} -> % 自动推断 MIME 类型 ContentType = get_content_type(FilePath), Req = cowboy_req:reply(200, #{ <<"content-type">> => list_to_binary(ContentType), <<"content-disposition">> => <<"attachment; filename=\"", Path/binary, "\""> }, Data, Req0), {ok, Req, State}; {error, enoent} -> Req = cowboy_req:reply(404, #{}, <<"File not found">>, Req0), {ok, Req, State} end. % 简单的 MIME 类型判断 get_content_type(File) -> case filename:extension(File) of ".txt" -> "text/plain"; ".pdf" -> "application/pdf"; ".zip" -> "application/zip"; ".json" -> "application/json"; ".html" -> "text/html"; _ -> "application/octet-stream" end. ``` --- #### 3. 路由配置(在启动 Cowboy 时设置) 假设你在 `my_http_server_sup.erl` 中启动 Cowboy 监听: ```erlang cowboy:start_clear(my_http_listener, [{port, 8080}], #{env => #{dispatch => dispatch_config()}} ). dispatch_config() -> cowboy_router:compile([ {'_', [ {"/download/:path", file_handler, []}, {"/", cowboy_static, {priv_file, my_http_server, "index.html"}} ]} ]). ``` --- #### 4. 使用说明 - 启动服务后,访问: ``` http://localhost:8080/download/example.txt ``` 浏览器将触发文件下载,保存为 `example.txt`。 - 若文件不存在,返回 404。 - `content-disposition: attachment` 头确保浏览器不直接打开文件,而是提示下载。 --- #### 5. 注意事项 - 文件路径要防止路径遍历攻击(如 `../../etc/passwd`),建议对 `:path` 参数做白名单或正则校验。 - 大文件应使用流式发送(`cowboy_stream` 或 `cowboy_req:stream_reply`),避免一次性加载到内存。 - 生产环境建议使用 `cowboy_static` 直接服务静态文件,更高效。 --- ### 安全增强版:路径过滤示例 ```erlang is_valid_filename(Filename) -> case re:run(Filename, "^[a-zA-Z0-9._-]+$") of {match, _} -> true; nomatch -> false end. ``` 在 `init/2` 中加入校验: ```erlang case is_valid_filename(binary_to_list(Path)) of true -> continue_with_file_read; false -> cowboy_req:reply(400, #{}, <<"Invalid filename">>, Req0) end ``` --- ### 总结 上述代码展示了如何使用 **Cowboy** 实现安全的文件下载功能,核心是: - 使用 `cowboy_handler` 返回文件内容; - 设置正确的 `Content-Type` 和 `Content-Disposition`; - 防止路径遍历; - 支持动态文件名。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值