ho usatobrevi nomi di file che causa problemi con due percorsi altrimenti identici
Files.createTempFile("Hello", "txt");
per creare un file temporaneo e memorizzato il restituita Path
.
Ho un IFile
risorsa Eclipse legata al file temporaneo che ho creato:
linkedFile.createLink(tempFile.toUri(), IResource.NONE, null);
Se voglio ottenere un Path
indietro da questa risorsa, io chiamo
linkedFile.getLocation().toFile().toPath()
Sulla mia macchina locale, funziona perfettamente al 100%. Ma su una macchina di prova a distanza, ottengo due diversi percorsi:
da Files.createTempFile:
C:\Users\USERNA~1\AppData\Local\Temp\Hello3606197456871226795txt
da getLocation().toFile().toPath()
C:\Users\Username_Testing\AppData\Local\Temp\Hello3606197456871226795txt
La cartella Username_Testing e solo quella cartella si lascia girare in una breve il nome del file, e solo per la mia diretta la creazione di esso come un temporaneo.
Questi due percorsi non sono considerati uguali da Path.equals(...)
, causando un errore dei test sulla macchina remota.
In generale, questo mi rende un po 'nervoso usando Path.equals(...)
anche se nel reale funzionamento reale dell'applicazione non ho ancora avuto problemi. C'è un modo in cui posso forzare il sistema a sempre a utilizzare nomi di file lunghi? C'è qualcosa che mi manca di cui dovrei essere a conoscenza quando eseguo i controlli di uguaglianza dei percorsi o quando converti i percorsi da una forma all'altra?
Aggiornamento n. 1: questo problema specifico è causato da% TEMP% sul computer Windows di destinazione che restituisce un percorso utilizzando un nome file breve, che non si verifica sul mio computer locale. Solo il codice di test crea file e cartelle temporanei, quindi questo non influirà sull'applicazione reale. La soluzione ovvia al mio problema attuale è la correzione% TEMP%, quindi i test funzionano bene in entrambi i casi, ma questa soluzione non è praticabile in senso generale. Sarebbe bello se ci fosse un modo per correggere la situazione senza modificare il computer di destinazione o saltare in codice nativo o specifico di Windows, dal momento che non ho usato tale codice direttamente per ottenere entrambi i percorsi.
Le soluzioni collegate sono molto specifiche di Windows; Preferirei una soluzione più portatile. Inoltre, sembra che la conversione in un nome di file breve non sia una cosa semplice da fare, eppure ho ottenuto il mio da 'Files.createTempFile', senza alcun trucco aggiuntivo di codice nativo. I nomi di percorso brevi –
sono di Windows solo per quanto ne so. –
Apprezzo la tua risposta, tuttavia è stato più facile e più portabile convertire da percorsi di file brevi a percorsi di nomi di file lunghi (poiché sembra essere lo standard con Eclipse) anziché convertire in percorsi di nome file brevi. –