Подтвердить что ты не робот

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

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

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. Может быть, нужен другой доступ к файлам? Какой?

Как я понимаю другими сообщениями, они всегда используют путь и расширение, однако я не знаю, что путь и расширение будут в моем случае...

Что я ищу, я получаю доступ к пространства имен объектов ядрa > пространства имен объектов ядра

Я знаю, что есть пример JNI (Memorymap с использованием JNI), однако я хотел бы сохранить его простым и использовать nio ( если возможно).

UPDATE

Итак, я просто попробовал все это на С#, и это было смешно легко, не взяло меня более 5 строк кода.

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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