在 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/