Frage

Aus Java extrahiere ich eine ausführbare Datei in einen von Datei.CreateTempile () angegebenen Speicherort. Wenn ich versuche, meine ausführbare Datei auszuführen, hängt mein Programm, wenn es versucht, die erste Ausgabezeile zu lesen.

Ich habe festgestellt, dass wenn ich versuche, die gleiche extrahierte ausführbare Datei aus einem anderen Programm auszuführen, es funktioniert, wenn ich das Verzeichnis als C: Dokumente und Einstellungen Benutzername Lokale Einstellungen temp prog.exe angeben. Aber wenn ich das Verzeichnis als c: docume ~ 1 usererna ~ 1 locals ~ 1 temp prog.exe angeben habe, bekomme ich den Hang.

Gibt es eine Möglichkeit, den Tilde -Dateinamen in meinem Programm zu entmischen, damit ich einen Verzeichnisnamen angeben kann, der funktioniert?

(Und da ich immer gerne die Sprach- und API -Designprobleme anspricht, gibt es einen Grund, warum Java -Datei.CreateTempile () und java.io.tmpdir zu verstümmelten Dateinamen bewerten müssen?)

War es hilfreich?

Lösung

Sie können verwenden getCanonicalPath() Um den erweiterten Weg zu bekommen. Z.B:

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

... produziert ...

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

Ich habe dies auf XP getestet, aber es würde ähnlich auf anderen Windows -Betriebssystemen funktionieren.

Siehe @Raviaws Antwort auf Ihre zweite Frage.

Andere Tipps

Wow, das habe ich nie gesehen. Tatsache ist, dass die Umgebungsvariable % temp % einen verstümmelten Namen zurückgibt (dies ist von meinem Computer):

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

Unter der Annahme, dass ein neu erstellter Java VM die Umgebungsvariable verwendet, um den Standort temporärer Ordner zu erhalten, ist es nicht die Schuld von VM, dass die Verzeichnisse verstopfen.

Und selbst wenn Sie versuchen zu verwenden System.getenv () Um den temporären Ordner zu erhalten, haben Sie immer noch das gleiche Problem.

Ich würde das sicherstellen:

  • Das Problem wird nicht durch die Tatsache verursacht, dass Sie ein Verzeichnis namens "Prog.exe" haben (basierend auf Ihrer Frage gehe ich davon aus);
  • Wenn die Datei "prog.exe" ist, wenn sie von einem anderen Programm nicht verwendet wurde (vielleicht ein Antivirus);
  • Überprüfen Sie, ob Ihr Computer gesund ist (dies wäre ein sehr kritischer Fehler für jede Anwendung, die keine Webanwendung ist und die temporäre Dateien benötigt).
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top