在 Julia 中,如何在为内存映射创建文件后删除文件?
In Julia, How do you delete a file after creating it for memory-mapping?
我尝试使用大型数据结构来存储超过 ram 可以处理的内容,结果我不得不使用 mmap。
这一切都按预期工作,但是在代码末尾我想删除这个临时文件,因为它不再被使用。
我试过使用 rm 删除文件或在文件 运行 时手动删除它,但我没有这样做的权限。
这就是我的代码的样子。
using Mmap
io = open("example.tmp", "w+")
v = Mmap.mmap(io,Vector{Int64},Int64(1e9))
close(io)
#Perform some actions on vector v
#attempt to delete here, rm("example.tmp") returns an EACCES error though
我希望能够在不再使用时自动删除此 .tmp 文件,我该怎么做?
using Mmap
io = open("example.tmp", "w+")
v = Mmap.mmap(io,Vector{Int64},Int64(1e9))
close(io)
#Perform some actions on vector v
v = nothing # delete reference to memory mapped data
GC.gc() # call garbage collector to be safe
rm("example.tmp") # should work now
只要存在对内存映射数据的引用,您就可能 运行 进入权限问题。毕竟你仍然可以使用 v
。尝试通过设置 v = nothing
并在之后调用 GC 来 delete/overwrite 任何对数据的引用。
我尝试使用大型数据结构来存储超过 ram 可以处理的内容,结果我不得不使用 mmap。
这一切都按预期工作,但是在代码末尾我想删除这个临时文件,因为它不再被使用。
我试过使用 rm 删除文件或在文件 运行 时手动删除它,但我没有这样做的权限。
这就是我的代码的样子。
using Mmap
io = open("example.tmp", "w+")
v = Mmap.mmap(io,Vector{Int64},Int64(1e9))
close(io)
#Perform some actions on vector v
#attempt to delete here, rm("example.tmp") returns an EACCES error though
我希望能够在不再使用时自动删除此 .tmp 文件,我该怎么做?
using Mmap
io = open("example.tmp", "w+")
v = Mmap.mmap(io,Vector{Int64},Int64(1e9))
close(io)
#Perform some actions on vector v
v = nothing # delete reference to memory mapped data
GC.gc() # call garbage collector to be safe
rm("example.tmp") # should work now
只要存在对内存映射数据的引用,您就可能 运行 进入权限问题。毕竟你仍然可以使用 v
。尝试通过设置 v = nothing
并在之后调用 GC 来 delete/overwrite 任何对数据的引用。