Файл с отображенной памятью в C ++, читаемый в Java

У меня есть программа C ++, которая использует в один момент

hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);

lpName это что-то вроде "myfile" без расширений или пути, то есть файл с отображенной памятью. Я могу найти файл с WinObj-Браузер (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 строк кода.

18

Решение

Файл — это файл, я согласен с «Joachim Pileborg», что программа на Java не получила файл в своем рабочем каталоге. Пытаться

String working dir = System.getProperty("user.dir");

и убедитесь, что файл находится в правильном пути.

1

Другие решения

Вам нужно использовать CreateFileMapping вместо OpenFileMapping, Таким образом, вы создадите фактический файл на диске, который связан с сопоставлением файлов.

Примечание. Важно отметить, что использование обычных методов чтения / записи НЕ будет синхронизировано с сопоставлением файлов другого процесса. Так что вам все еще нужно использовать что-то вроде MappedByteBuffer в Java

0

По вопросам рекламы [email protected]