Ono*_*cci 1 windows erlang file-io elixir
药剂1.3.2
Erlang / OTP 19
Windows 7(标准用户和管理员)
我正在尝试破解一个小的Elixir脚本,以将提交文件提交给git。为了确保我不会意外暂存emacs创建的临时文件,我要做的第一件事是File.rm(“ *〜”)。但是,这就是我得到的:
iex(2)> File.rm("*~")
{:error, :eio}
Run Code Online (Sandbox Code Playgroud)
所以我尝试了File.rm("*.*~")。结果相同。当我以标准用户身份(这是我通常在Windows上的工作方式)或以管理员身份运行时,我会得到相同的行为,因此似乎也没有任何权限。
因此,我将文件捕获到一个列表中。
iex(15)> {:ok,files} = File.ls
{:ok,
[".git", ".gitattributes", ".gitignore", "add.factor", "async_ut",
"async_ut.cs", "cng_maint", "codecvg.cmd", "codecvg_rkt.cmd",
"codecvg_rkt.cmd~", "CreateBr.vbs", "DevSandbox", "distillery", "dk.cmd",
"example.scm", "example.sql", "factor", "fsele", "fsharp", "glp.vbs",
"lwwtww.org", "mrgmain.cmd", "MrgMain.vbs", "mrgtrunk.cmd", "mrgtrunk.cmd~",
Run Code Online (Sandbox Code Playgroud)
(为了节省空间而将其截短)
我可以检查包含列表中的字符串,~然后返回true。所以我没有想象波浪号在那里。
我test.txt在目录中创建了一个临时文件。 File.rm删除了那一个就好了,所以似乎与~引起问题的原因有关。我也尝试了这些:
iex(7)> File.rm("*\~")
{:error, :eio}
iex(8)> File.rm("*\7F") #7F is hex code of ~
{:error, :eio}
Run Code Online (Sandbox Code Playgroud)
如您所见,没有运气。
:eio使用Elixir和File.rm 进行的任何搜索都没有发现任何有用的信息。我可以尝试安装1.4.0,看看是否有效果,但是我只是想看看我是否在这里缺少了一些愚蠢而明显的东西。
我在计算机上也安装了cygwin,因此尝试以这种方式删除文件。 rm *~完全按预期工作(在标准用户下)。
似乎这是某种特定于Erlang的问题,但我首先在这里提出。我做错了什么吗?
据我所知,File.rm不会自动处理通配符,您需要使用以下Path.wildcard功能:
File.rm(Path.wildcard("*~"))
Run Code Online (Sandbox Code Playgroud)
要么
Path.wildcard('*~') |> Enum.each(fn x -> File.rm(x) end)
Run Code Online (Sandbox Code Playgroud)
一个以上的文件(这可能是更常见的情况)。