Domanda

Da Java, che sto estraendo un eseguibile in una posizione specificata utilizzando File.createTempFile (). Quando cerco di eseguire il mio eseguibile, il mio programma si blocca quando tenta di leggere la prima riga di output.

ho scoperto che se si tenta di eseguire lo stesso eseguibile estratto da un altro programma, funziona se a specificare la directory C: \ Documents and Settings \ nomeutente \ Impostazioni locali \ Temp \ PROG.EXE. Ma se a specificare la directory come C:. \ DOCUME ~ 1 \ USERNA ~ 1 \ LOCALS ~ 1 \ Temp \ PROG.EXE ottengo il blocco

C'è un modo per unmangle il nome del file tilde nel mio programma in modo da poter indicare un nome di directory che funziona?

(E siccome mi piace sempre affrontare i problemi di progettazione di lingua e di API, v'è alcuna ragione per cui Java File.createTempFile () e java.io.tmpdir devono valutare per i nomi di file straziati?)

È stato utile?

Soluzione

È possibile utilizzare getCanonicalPath() per ottenere il percorso espanso. Per esempio:.

try
{
  File file = File.createTempFile("abc", null);
  System.out.println(file.getPath());
  System.out.println(file.getCanonicalPath());
}
catch (IOException e) {}

... produce ...

C:\DOCUME~1\USERNA~1\LOCALS~1\Temp\abc49634.tmp
C:\Documents and Settings\username\Local Settings\Temp\abc49634.tmp

Ho provato questo su XP, ma presumo che avrebbe funzionato allo stesso modo su altri sistemi operativi Windows.

Si veda la risposta di @ raviaw alla tua seconda domanda.

Altri suggerimenti

Wow, non ho mai visto questo. Il fatto è che l'ambiente% TEMP variabile% restituisce un nome storpiato (questo è dal mio computer):

TEMP=C:\DOCUME~1\raviw\LOCALS~1\Temp
TMP=C:\DOCUME~1\raviw\LOCALS~1\Temp

Partendo dal presupposto che una nuova creazione di Java VM utilizza la variabile d'ambiente per ottenere la posizione della cartella temporanea, non è colpa di VM che le directory stanno arrivando maciullato.

E anche se si tenta di utilizzare System.getenv () per ottenere la cartella temporanea, si avrà ancora lo stesso problema.

vorrei fare in modo che:

  • Il problema non è causato dal fatto che avete una directory chiamata "PROG.EXE" (in base alla tua domanda, io parto dal presupposto questo);
  • Se il file è "PROG.EXE", se non fosse in uso da un altro programma (un antivirus, forse);
  • Verificando il computer è sano di mente (questo sarebbe un bug molto critico per qualsiasi applicazione che non è un'applicazione web e che hanno bisogno di file temporanei).
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top