Mam program C++, który używa się w jednym punkciepamięci plik Mapowany w C++ odczytać w Javie
hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);
lpName
jest coś takiego "myfile"
bez rozszerzeń lub ścieżki, to znaczy pliku pamięci odwzorowany. Mogę znaleźć plik z WinObj-Browser (WinObj) na ścieżce Sessions\1\BaseNamedObjects\myfile
. Jeśli próbie odczytania tego konkretnego pliku w Javie, próbowałem
File file = new File("myfile");
FileChannel filechannel = new RandomAccessFile(file, "r").getChannel();
MappedByteBuffer buffer = filechannel.map(FileChannel.MapMode.READ_ONLY, 0, filechannel.size());
Ale mam zawsze ten sam błąd: Nie można odnaleźć określonego pliku na komendę RandomAccessFile
. Może potrzebny jest inny dostęp do pliku? Który?
Jak rozumiem przez innych stanowisk, zawsze użyć ścieżki i rozszerzenia, jednak nie mam pojęcia, czy ścieżka i rozszerzenie byłoby w moim przypadku ...
Co szukam, i sposób, aby uzyskać dostęp do obiektów jądra Kernel object namespaces nazw
wiem, nie jest to przykład JNI (Memorymap using JNI), jednak chciałbym zachować to proste i używać nio
(jeśli w ogóle możliwe).
UPDATE
Więc po prostu starał się całość w języku C# i było śmiesznie łatwe, nie zajmie mi więcej niż 5 linii kodu.
Jaki jest bieżący katalog roboczy programu C++? Tam właśnie tworzony jest plik. Jeśli nie podasz bezwzględnej ścieżki, nazwa pliku zostanie utworzona w ścieżce względnej z bieżącego katalogu roboczego procesu. Jeśli dwa działające katalogi C++ i programy Java nie są takie same, nie można tak naprawdę użyć ścieżki względnej, należy określić ścieżkę bezwzględną, taką samą w obu programach, aby znaleźć plik. –
@ErwinBolwidt: Tak, istnieje, napisałem w pytaniu, że mogę uzyskać dostęp do tego pliku podczas testowania aplikacji Java w przeglądarce winobj. @JoachimPileborg: Jest to coś w rodzaju 'C: \ Project \ server \', głupie pytanie: plik nie jest widoczny w 'explorer', ale myślę, że nie powinien? – rst
Obiekt odwzorowania pliku nie jest częścią systemu plików. Katalog roboczy nie jest istotny. Będziesz także musiał wywołać 'OpenFileMapping'. 'RandomAccessFile' tego nie zrobi. –