Ho un programma C++ che utilizza a un certo puntoMemoria file mappato in C++ leggere in Java
hMapFile = OpenFileMapping(dwDesiredAccess, bInheritHandle, lpName);
Il lpName
è qualcosa di simile "myfile"
senza estensioni o il percorso, vale a dire un file di memoria mappata. Riesco a trovare il file con WinObj -Browser (WinObj) nel percorso Sessions\1\BaseNamedObjects\myfile
. Se provo a leggere quel particolare file in Java, ho provato
File file = new File("myfile");
FileChannel filechannel = new RandomAccessFile(file, "r").getChannel();
MappedByteBuffer buffer = filechannel.map(FileChannel.MapMode.READ_ONLY, 0, filechannel.size());
Ma ho sempre lo stesso errore: Impossibile trovare il file specificato al comando RandomAccessFile
. Forse è necessario un altro accesso ai file? Quale?
quanto ho capito da altri messaggi, usano sempre un percorso e un prolungamento, però, non ho idea di che il percorso e l'estensione sarebbe nel mio caso ...
Quello che sto cercando, ho un modo per accedere alle Kernel object namespaces kernel namespace oggetto
so, c'è questo esempio JNI (Memorymap using JNI), tuttavia desidero mantenerlo semplice e utilizzando nio
(se ancora possibile).
UPDATE
Così ho appena provato il tutto in C# ed è stato ridicolmente facile, non mi ha preso più di 5 righe di codice.
Qual è la directory di lavoro corrente del programma C++? Ecco dove viene creato il file. Se non si specifica un percorso assoluto, il nome file viene creato nel percorso relativo dalla directory di lavoro corrente del processo. Se le due directory di lavoro del C++ e dei programmi Java non sono uguali, non è possibile utilizzare il percorso relativo, è necessario specificare un percorso assoluto, uguale in entrambi i programmi, per trovare il file. –
@ErwinBolwidt: Sì, esiste, ho scritto nella domanda, che posso accedere a quel file mentre collaudo l'app Java nel browser winobj. @JoachimPileborg: È qualcosa come 'C: \ Project \ server \', domanda stupida: il file non è visibile in 'explorer', ma immagino che non dovrebbe? – rst
L'oggetto di mappatura file non fa parte del file system. La directory di lavoro non è rilevante. Dovrai anche chiamare 'OpenFileMapping'. 'RandomAccessFile' non lo farà. –