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下的文件所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)