windows - 为什么我不能删除带波浪号的文件?

标签 windows file-io erlang elixir

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/

相关文章:

windows - 在 Windows 8 上使用 SSH 连接到 Amazon EC2 的权限被拒绝

PHP file_get_contents 超时 "local file"(NFS/挂载)

c# - 减少文件操作的内存占用

architecture - 你如何设计一个基于 Erlang/OTP 的分布式容错多核系统的架构?

windows - DLL 链接器问题

python - 错误: Namespace packages not yet supported: Skipping package 'pywintypes'

c - 如何在隐藏目录中创建文件?

带单引号的 Erlang 记录语法

erlang - 如何限制消息队列或模拟它?

windows - 一个进程可以加载两个名称完全相同的 DLL 吗?