我有一个使用C++编写的程序,在其中的某一点使用了
hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);
lpName
是类似于没有扩展名或路径的"myfile"
,即内存映射文件。我可以使用WinObj-Browser(WinObj)在路径Sessions\1\BaseNamedObjects\myfile
中找到该文件。如果我尝试在Java中读取该特定文件,我尝试了:
File file = new File("myfile");
FileChannel filechannel = new RandomAccessFile(file, "r").getChannel();
MappedByteBuffer buffer = filechannel.map(FileChannel.MapMode.READ_ONLY, 0, filechannel.size());
但我总是遇到同样的错误:找不到指定的文件在RandomAccessFile
命令中。也许需要另一个文件访问?哪一个?
根据其他文章的理解,他们总是使用路径和扩展名,然而,在我的情况下,我不知道路径和扩展名会是什么...
我正在寻找一种访问内核对象命名空间的方法。
我知道有这个JNI例子(使用JNI进行内存映射),但是我想保持简单,并使用nio
(如果可能的话)。
更新
因此,我刚在C#中尝试了整件事情,它非常容易,只用了不到5行代码。
C:\ Project \ server \
,愚蠢的问题:该文件在“资源管理器”中不可见,但我猜它不应该出现? - rstOpenFileMapping
。RandomAccessFile
不会这样做。 - David HeffernanOpenFileMapping
,那么相应的等效方法是什么?@DavidHeffernan - rstMappedByteBuffer
似乎要求您手头有文件系统文件名。我倾向于使用JNI或JNA。 - David Heffernan