Ich habe ein C++ Programm, dieMemory Mapped-Datei in C++ in Java lesen
hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);
Die lpName
an einem Punkt verwendet, ist so etwas wie "myfile"
ohne Erweiterungen oder Pfad, das heißt, eine Memory-Mapped-Datei. Ich kann die Datei mit dem WinObj -Browser (WinObj) im Pfad Sessions\1\BaseNamedObjects\myfile
finden. Wenn ich versuche, diese bestimmte Datei in Java zu lesen, habe ich versucht,
File file = new File("myfile");
FileChannel filechannel = new RandomAccessFile(file, "r").getChannel();
MappedByteBuffer buffer = filechannel.map(FileChannel.MapMode.READ_ONLY, 0, filechannel.size());
Aber ich bekomme immer den gleichen Fehler: die angegebene Datei nicht am RandomAccessFile
Befehl gefunden. Vielleicht wird ein anderer Dateizugriff benötigt? Welcher?
Wie ich von anderen Beiträgen zu verstehen, sie immer einen Weg benutzen und eine Verlängerung, aber ich habe keine Ahnung, dass der Pfad und Erweiterung in meinem Fall wäre ...
Was ich suche, ich eine Möglichkeit, das Kernel object namespaces Kernel-Objekt Namespaces
ich weiß, zugreifen zu können, gibt es dieses JNI Beispiel (Memorymap using JNI), jedoch würde ich mag es einfach zu halten und verwenden nio
(wenn überhaupt möglich).
UPDATE
Also versuchte ich einfach die ganze Sache in C# und es war lächerlich einfach, hat mich nicht nehmen mehr als 5 Zeilen Code.
Was ist das aktuelle Arbeitsverzeichnis des C++ Programms? Dort wird die Datei erstellt. Wenn Sie keinen absoluten Pfad angeben, wird der Dateiname im relativen Pfad des aktuellen Arbeitsverzeichnisses erstellt. Wenn die beiden Arbeitsverzeichnisse des C++ - und des Java-Programms nicht identisch sind, können Sie den relativen Pfad nicht wirklich verwenden. Sie sollten einen absoluten Pfad angeben, der in beiden Programmen identisch ist, um die Datei zu finden. –
@ErwinBolwidt: Ja, es existiert, schrieb ich in der Frage, dass ich auf diese Datei zugreifen kann, während ich die Java-App im Winobj-Browser teste. @JoachimPileborg: Es ist so etwas wie 'C: \ Project \ server \ ', blöde Frage: Die Datei ist nicht sichtbar im' explorer', aber ich denke es sollte nicht? – rst
Das Dateizuordnungsobjekt ist nicht Teil des Dateisystems. Arbeitsverzeichnis ist nicht relevant. Sie müssen auch 'OpenFileMapping' aufrufen. 'RandomAccessFile' wird das nicht tun. –