Pregunta

A partir de Java, estoy extraer un archivo ejecutable en un lugar especificado usando File.createTempFile (). Cuando trato de ejecutar mis, mis bloqueos de programas ejecutables cuando se trata de leer la primera línea de salida.

He descubierto que si trato de ejecutar el mismo ejecutable extraído de otro programa, que funciona si puedo especificar el directorio C: \ Documents and Settings \ nombre de usuario \ Configuración local \ Temp \ PROG.EXE. Pero si puedo especificar el directorio C: \ DOCUME ~ 1 \ USERNA ~ 1 \ LOCALS ~ 1 \ Temp \ PROG.EXE consigo la caída

.

¿Hay una manera de unmangle el nombre del archivo tilde en mi programa para que pueda especificar un nombre de directorio que va a funcionar?

(Y como siempre me gusta hacer frente a los problemas de diseño de lenguajes y API, ¿hay alguna razón por la cual Java File.createTempFile () y java.io.tmpdir tienen que evaluar a los nombres de archivo destrozados?)

¿Fue útil?

Solución

Se puede utilizar getCanonicalPath() para obtener la ruta expandida. Por ejemplo:.

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

He probado esto en XP, pero supongo que funcionaría de manera similar en otros sistemas operativos Windows.

Véase la respuesta de @ raviaw a su segunda pregunta.

Otros consejos

Wow, nunca vi eso. El hecho es que la variable de entorno% TEMP% devuelve un nombre revuelto (esto es de mi equipo):

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

Si se asume que una nueva crear Java VM utiliza la variable de entorno para obtener la ubicación de la carpeta temporal, no es culpa de VM que los directorios están llegando destrozados.

E incluso si se intenta utilizar System.getenv () para obtener la carpeta temporal, de todas maneras tendrá el mismo problema.

I se aseguraría de que:

  • El problema no es causado por el hecho de que haya un directorio llamado "PROG.EXE" (basado en su pregunta, estoy asumiendo que esto);
  • Si el archivo es "PROG.EXE", si no estaba en uso por ningún otro programa (un antivirus, tal vez);
  • Comprobación de si el equipo está en su sano juicio (esto sería un error muy crítico para cualquier aplicación que no es una aplicación web y que necesitan archivos temporales).
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top