julia读写权限问题


#1

我在用julia计算的过程中,要多次把计算结果保存到txt里面,每次都要打开-写入-关闭.在win10下会出现
ERROR: LoadError: SystemError: opening file “SW_dyn2.txt”: Permission denied
是不是因为我的julia在user下而.jl文件是root下的原因?
程序链接: https://github.com/ww1g11/JuMag.jl
感谢


#2

搞个 MWE ,不然我们也不会用这个包,不好复现问题。

有这个可能。都用user就好了,julia 一般不需要管理员权限,文件不放 C 盘一般也都能读写。


#3

遇到相同的情况。。。运行的Julia包无写入权限。。。请问您的这个问题是否得到解决?是如何解决的?


#4

我一直没有解决…windows太痛苦了就改用linux了


#5

说明你把文件放错地方了。比如你的Julia刚启动的时候cwd可能在bin里面,而Julia被装到了C:\Program Files下,它需要管理员权限才能写入。你直接写相对路径的话是写到bin里面的。
你先搞明白current working directory的概念,不要上来就怪Windows。

补充说明一下,你在Windows上可能习惯于双击图标运行,这时候的cwd是你的图标快捷方式里写的启动目录,但Linux里你又习惯shell运行,这会继承你shell的cwd。shell一般启动的时候cwd是你的home文件夹,你当然有写入权限。如果你喜欢shell,那你在Windows下也用shell启动Julia就行了:Win+R,输入cmd或powershell,回车。


#6

我提这个问题的时候刚接触编程,当时是用windows terminal cd进去执行的,不知道会不会导致你说的问题…
当时的情况是连续写多好个txt,写着写着就告诉我没有权限停止执行了,而在停止之前已经写了好多了.如果是一开始就没有权限的话,程序应该开始就报错了,所以我自己觉得是windows的问题,干脆就用ubuntu了


#7

那不太好判断具体原因,如果有MWE的话可以让大家看看。

毕竟Julia依赖很多跨平台的基础设施,因此报错都是很一般化的错误,几乎不会尊重Windows平台的Error code。举个例子,你在Windows上打开一个文件,如果不指定dwShareMode的话,这个文件是默认不能共享的。在其中一个Julia进程里执行

julia> ccall(:CreateFileW,Ptr{Cvoid},(Cwstring,UInt32,UInt32,Ptr{Cvoid},UInt32,UInt32,Ptr{Cvoid}),"data.txt",0xC0000000,0,C_NULL,4,0,C_NULL)
Ptr{Nothing} @0x00000000000003e8

然后在另一个进程里打开文件

julia> io=open("data.txt")
ERROR: SystemError: opening file "data.txt": Permission denied
Stacktrace:
 [1] #systemerror#44(::Nothing, ::typeof(systemerror), ::String, ::Bool) at .\error.jl:134
 [2] systemerror at .\error.jl:134 [inlined]
 [3] #open#516(::Nothing, ::Nothing, ::Nothing, ::Nothing, ::Nothing, ::typeof(open), ::String) at .\iostream.jl:254
 [4] open(::String) at .\iostream.jl:246
 [5] top-level scope at REPL[2]:1

但其实根本就不是permission的问题。