f# – MemoryMappedFiles.MemoryMappedFile.CreateFromFile不会扩展linuxmono下的文件

f# – MemoryMappedFiles.MemoryMappedFile.CreateFromFile不会扩展linuxmono下的文件,第1张

概述在 windows下,当容量参数(最后一个参数)设置为比底层文件大时,此F#代码将文件从12个字节扩展到655346个字节.这似乎是扩展内存映射文件最干净的方法.在mono / linux下,它抛出一个ArgumentException:capacity,除非该文件与映射的容量一样长.是否有一种干净的方式来获取单声道扩展文件,或者我必须先预先扩展文件才能映射? let Main () = 在 windows下,当容量参数(最后一个参数)设置为比底层文件大时,此F#代码将文件从12个字节扩展到655346个字节.这似乎是扩展内存映射文件最干净的方法.在mono / linux下,它抛出一个ArgumentException:capacity,除非该文件与映射的容量一样长.是否有一种干净的方式来获取单声道扩展文件,或者我必须先预先扩展文件才能映射?

let Main () =    let path = "parts.pash"    let l = 65536L    let mm =    MemoryMappedfiles.MemoryMappedfile.CreateFromfile(path,fileMode.OpenorCreate,"pashmap",l)    ()Main()

错误信息

Unhandled Exception: System.ArgumentException: capacity at
System.IO.MemoryMappedfiles.MemoryMappedfile.CreateFromfile
(System.String path,fileMode mode,System.String mapname,Int64
capacity,MemoryMappedfileAccess access) [0x00000] in :0 at
System.IO.MemoryMappedfiles.MemoryMappedfile.CreateFromfile
(System.String path,Int64
capacity) [0x00000] in :0 at Program.Main ()
[0x00000] in :0 at
.$Program.main@ () [0x00000] in :0

单声道版本:

[daz@clowder pash]$mono --versionMono JIT compiler version 2.10.1 (tarball Mon Apr  4 10:40:52 PDT 2011)copyright (C) 2002-2011 Novell,Inc and Contributors. www.mono-project.com        TLS:           __thread        SIGSEGV:       altstack        Notifications: epoll        Architecture:  x86        Disabled:      none        Misc:          softdeBUG        LLVM:          supported,not enabled.        GC:            Included Boehm (with typed GC and Parallel Mark)

编辑:似乎内存映射的不同底层行为在API中公开,因此您需要将文件自己扩展到正确的长度以进行平台中立

let f = file.Open(path,fileMode.Append,fileAccess.Write)let pad = l- fileInfo(path).Lengthlet padding = Array.create (int32 pad) 0uyf.Write(padding,int pad)f.Close()
解决方法 查看CreateFromfile的.NET实现,没有该功能的实现.除了参数检查之外,从我可以看出,它是windows API调用的一个纤薄的包装器.

由于这个原因,创建一个更大的文件的能力更像是.NET领域的巧合,因此如果底层 *** 作系统不允许类似的功能,Mono就会删除这种能力也就不足为奇了.

更简单,不太可能,因为.NET版本在技术上也没有扩展文件,windows API也是如此.

总结

以上是内存溢出为你收集整理的f# – MemoryMappedFiles.MemoryMappedFile.CreateFromFile不会扩展linux/mono下的文件全部内容,希望文章能够帮你解决f# – MemoryMappedFiles.MemoryMappedFile.CreateFromFile不会扩展linux/mono下的文件所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1031002.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存