julia - 如何检查是否可以写入文件夹

标签 julia file-permissions

在 julia 中,如何检查当前是否允许写入文件夹?

我可以用 python 的方式来做,只是尝试去做,然后失败并恢复。 (在我的情况下,我肯定可以恢复,我有一个尝试写入的位置列表,作为后备。我希望前几个不起作用(前几个是共享位置,因此只有计算机管理员可能有权那里的作家)

最佳答案

Python 也有 os.access功能。也许 Julia 将来会有类似的东西。现在我们可以借用想法了。 :)

posixmodule.c中实现(也是 Windows 的功能!)所以如果你在 posix 上,你可以简单地模仿:

julia> const R_OK = 4  # readability
julia> const W_OK = 2  # writability
julia> const X_OK = 1  # executability
julia> const F_OK = 4  # existence

julia> access(path, mode) = ccall(:access, Cint, (Cstring, Cint), path, mode) == 0;

小测试:

julia> access("/root", W_OK)
false

julia> access("/tmp", W_OK)
true

(对于 Windows,它可能会更复杂一些......但我现在无法测试它)

编辑:

感谢 Matt B。我们可以在 Julia 中使用 libuv 支持,它必须是可移植的(尽管在 posix 系统上速度较慢):

julia> function uv_access(path, mode)
    local ret
    req = Libc.malloc(Base._sizeof_uv_fs)
    try
        ret = ccall(:uv_fs_access, Int32, (Ptr{Void}, Ptr{Void}, Cstring, Int64, Ptr{Void}), Base.eventloop(), req, path, mode, C_NULL)
        ccall(:uv_fs_req_cleanup, Void, (Ptr{Void},), req)
    finally
        Libc.free(req)
    end
    return ret, ret==0 ? "OK" : Base.struverror(ret)
end

julia> uv_access("/tmp", W_OK)
(0, "OK")

julia> uv_access("/root", W_OK)
(-13, "permission denied")

julia> uv_access("/nonexist", W_OK)
(-2, "no such file or directory")

关于julia - 如何检查是否可以写入文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118479/

相关文章:

linux - git 没有在 `.git` 文件夹中的新目录上保留 setgid 位?

php - Laravel 存储/日志 - 哪些是正确的权限和用户/组?

linux - 为什么 Docker COPY 不会更改文件权限? (--chmod)

julia - Julia 中范围的串联+收集

linux - Shell 在创建配置文件时提示文件权限

julia - Varargs 在 Julia 中给出了关键错误

julia - 如何在Julia中浏览字典?

c# - Microsoft Azure Web App - ASP.NET 无权访问请求的资源

julia - 如何删除 Julia REPL 中的函数?

Redis 在 julia 脚本中订阅不起作用