【问题标题】:In Julia, How do you delete a file after creating it for memory-mapping?在 Julia 中,如何在为内存映射创建文件后删除文件?
【发布时间】:2019-04-16 10:27:42
【问题描述】:

我正在尝试使用存储超过 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 文件,我该怎么做?

【问题讨论】:

    标签: julia memory-mapping


    【解决方案1】:
    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 来删除/覆盖对数据的任何引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-18
      • 1970-01-01
      • 2013-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多