Elixir 1.3.2
二郎/OTP 19
Windows 7(标准用户和管理员)
我正在尝试编写一个小的 Elixir 脚本来将文件提交到 git。为了确保我不会不小心暂存 emacs 创建的临时文件,我做的第一件事是 File.rm("*~")。然而,这就是我得到的:
iex(2)> File.rm("*~")
{:error, :eio}
所以我尝试了 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~",
(为节省空间而截断)
我可以检查包含 ~
的列表中的字符串,结果返回 true。所以我没有想象波浪号在那里。
我在目录中创建了一个名为test.txt
的临时文件。 File.rm
删除了那个就好了,所以它似乎是关于 ~
导致问题的。我也试过这些:
iex(7)> File.rm("*\~")
{:error, :eio}
iex(8)> File.rm("*\7F") #7F is hex code of ~
{:error, :eio}
如您所见,没有运气。
使用 Elixir 和 File.rm 搜索有关 :eio
的任何内容都没有找到任何有用的信息。我可以尝试安装 1.4.0 看看它是否有效果,但我只是想看看我是否遗漏了一些愚蠢而明显的东西。
我的机器上也安装了 cygwin,所以我尝试以这种方式删除文件。 rm *~
完全按预期工作(在标准用户下)。
这似乎是某种特定于 Erlang 的问题,但我首先在这里询问。我做错了什么吗?
最佳答案
File.rm/1据我所知不会自动处理通配符,您需要使用 Path.wildcard/2
功能:
File.rm(Path.wildcard("*~"))
或
Path.wildcard('*~') |> Enum.each(fn x -> File.rm(x) end)
对于多个文件(这可能是更一般的情况)。
关于windows - 为什么我不能删除带波浪号的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41285984/