Rufen Sie den Pfad der Anwendung ab
Habe ich vor kurzem gesucht, wie ich bekommen konnte, um die Anwendung Verzeichnis, in Java. Ich habe endlich die Antwort gefunden, aber ich brauchte überraschend lange, weil die Suche nach wie ein generischer Begriff ist nicht einfach. Ich denke, es wäre eine gute Idee, eine Liste zusammenzustellen, wie zu erreichen ist dies in mehreren Sprachen.
Fühlen Sie sich frei, um die up - /downvote, wenn Sie (nicht) mag die Idee und bitte tragen Sie wenn Sie es mögen.
Klarstellung:
Es gibt eine feine Unterscheidung zwischen den Verzeichnis, das die ausführbare Datei enthält und die aktuellen Arbeitsverzeichnis (gegeben durch pwd
unter Unix). Ich war ursprünglich interessiert an der ehemaligen, aber fühlen Sie sich frei, um post-Methoden für die Bestimmung der letzteren (die Klärung, welche Sie bedeuten).
InformationsquelleAutor der Frage |
Du musst angemeldet sein, um einen Kommentar abzugeben.
In Java die Anrufe
und
return das aktuelle Arbeitsverzeichnis.
Den Aufruf
gibt den Pfad zu der JAR-Datei enthält die aktuelle Klasse, oder die CLASSPATH-element (Pfad), ergab die aktuelle Klasse, wenn Sie direkt aus dem Dateisystem.
Beispiel:
Ihre Anwendung befindet sich bei
Öffnen Sie das shell - (cmd.exe) und
cd
zu C:\test\subdirectory.Starten Sie die Anwendung mit dem Befehl
java -jar C:\MyJar.jar
.Den ersten beiden aufrufen return 'C:\test\subdirectory'; der Dritte Aufruf gibt 'C:\MyJar.jar'.
Beim ausführen von Dateisystem anstatt einer JAR-Datei, das Ergebnis wird der Pfad auf die root des erzeugten class-Dateien, zum Beispiel
Den Pfad nicht enthalten sind die Paket-Verzeichnisse für die generierten class-Dateien.
Ein komplettes Beispiel, um die Anwendung Verzeichnis ohne .jar-Datei name, oder der entsprechende Pfad zu den class-Dateien, wenn bei der Ausführung direkt aus dem Dateisystem (z.B. beim Debuggen):
InformationsquelleAutor der Antwort
In .NET (C#, VB, ...)können Sie die Abfrage der aktuellen
Assembly
Instanz für seineLocation
. Das hat allerdings die ausführbare Datei Namen angefügt wird. Der folgende code bereinigt Pfad (using System.IO
undusing System.Reflection
):Alternativ können Sie die Informationen verwenden, die zur Verfügung gestellt von
AppDomain
Suche nach referenzierten Assemblys:VB ermöglicht eine weitere Verknüpfung über die
My
namespace:InformationsquelleAutor der Antwort
In Windowsverwenden Sie die WinAPI-Funktion GetModuleFileName(). Übergeben Sie NULL für das Modul-handle, um den Pfad für das aktuelle Modul.
InformationsquelleAutor der Antwort
Python
Bekommt den Pfad des aktuellen Moduls.
InformationsquelleAutor der Antwort
Objective-C Cocoa (Mac OS X, ich weiß nicht, für iPhone, Besonderheiten):
InformationsquelleAutor der Antwort
In Javagibt es zwei Möglichkeiten, die Anwendung zu finden ist Weg. Man ist zu beschäftigen
System.getProperty
:Andere Möglichkeit ist die Verwendung von
java.io.File
:Noch eine weitere Möglichkeit nutzt Reflexion:
InformationsquelleAutor der Antwort
In VB6, können Sie den Pfad der Anwendung über die
App.Path
Eigenschaft.Beachten Sie, dass dies nicht über eine nachfolgende
\
AUßER wenn die Anwendung in das Stammverzeichnis des Laufwerks.In der IDE:
InformationsquelleAutor der Antwort
In .Net können Sie
System.IO.Directory.GetCurrentDirectory
zu Holen Sie sich die aktuellen Arbeitsverzeichnis der Anwendung, und in VB.NET speziell können Sie
My.Application.Info.DirectoryPath
zu erhalten, das Verzeichnis der exe-Datei.
InformationsquelleAutor der Antwort
Delphi
In Windows-Anwendungen:
In Konsole Anwendungen:
Unabhängig von der Sprache, der erste Kommandozeilen-parameter ist der voll qualifizierte executable name:
InformationsquelleAutor der Antwort
Libc
In *nix-Typ-Umgebung (auch Cygwin unter Windows):
Sehen Mann Seite
InformationsquelleAutor der Antwort
Unix
In unix kann man den Pfad zu der ausführbaren Datei, die gestartet wurde mit dem environment-Variablen. Es ist nicht unbedingt einen absoluten Pfad, so würden Sie brauchen, um zu kombinieren das aktuelle Arbeitsverzeichnis (in der shell:
pwd
) und/oder PATH-variable mit dem Wert 0 ' th-element der Umwelt.Den Wert beschränkt, der in unix-obwohl, wie die ausführbare Datei kann zum Beispiel aufgerufen werden, durch einen symbolischen link und nur der erste link ist für die environment-variable. In Allgemeinen Anwendungen auf unix sind nicht sehr robust, wenn Sie diese für eine interessante Sache (zum Beispiel das laden von Ressourcen). Unter unix ist es üblich mit hart-codierte Standorte für Dinge, zum Beispiel einer Konfigurationsdatei in
/etc
wo die Ressource Standorte sind angegeben.InformationsquelleAutor der Antwort
In bashdie 'pwd' - Befehl gibt das aktuelle Arbeitsverzeichnis zurück.
InformationsquelleAutor der Antwort
In PHP :
InformationsquelleAutor der Antwort
in Android seine
zu bekommen-SD-Karte, ich benutze
denen die letztere wird verwendet, um zu speichern eine bestimmte Art von Datei (Audio, Filme, etc). Sie haben Konstanten für diese strings im Environment-Klasse.
Grundsätzlich für alles zu mit app verwenden die Klasse ApplicationInfo und für alles, was zu tun mit den Daten, die in SD-Karte /Externen Verzeichnis, indem Sie Umwelt-Klasse.
Docs :
ApplicationInfo ,
Umgebung
InformationsquelleAutor der Antwort
In Tcl
Pfad des aktuellen Skripts:
Tcl-shell Pfad:
Wenn Sie das Verzeichnis eines von diesen zu tun:
Aktuelle (Arbeits -) Verzeichnis:
InformationsquelleAutor der Antwort
in Rubinder folgende Codeausschnitt liefert den Pfad der aktuellen Quellcode-Datei:
InformationsquelleAutor der Antwort
In CFML es gibt zwei Funktionen für den Zugriff auf den Pfad eines Skripts:
Aufrufen getBaseTemplatePath gibt den Pfad zu den 'base' - Skript - also derjenige, der angefordert wurde, die vom web-server.
Aufruf getCurrentTemplatePath gibt den Pfad des aktuellen Skripts - d.h. die, die derzeit ausgeführt werden.
Beide Pfade sind absolut und enthalten das vollständige Verzeichnis+Dateiname des Skripts.
Zu ermitteln, das Verzeichnis, verwenden Sie die Funktion
getDirectoryFromPath( ... )
auf die Ergebnisse.So, um zu ermitteln das Verzeichnis der Anwendung, die Sie tun könnten:
Innerhalb der
onApplicationStart
Veranstaltung für IhreApplication.cfc
Bestimmen Sie den Pfad, wo die app Ihre server mit CFML engine ist, haben Sie Zugriff auf shell-Kommandos mit cfexecute, (unter Berücksichtigung oben genannten Diskussionen auf pwd/etc), die Sie tun können:
Unix:
für Windows, erstellen Sie eine
pwd.bat
mit text@cd
dann:(Verwenden Sie die
variable
Attributcfexecute
um den Wert zu speichern, anstelle von der Ausgabe auf dem Bildschirm.)InformationsquelleAutor der Antwort
In cmd (der Microsoft-Befehlszeilen-shell)
Können Sie den Namen des Skripts mit %* (kann relativ zu pwd)
Diese bekommt directory script:
Wenn Sie irgendwelche bugs finden, die Sie werden. Dann bitte korrigieren oder kommentieren.
InformationsquelleAutor der Antwort
Ich veröffentlicht https://github.com/gpakosz/whereami das löst das problem in C und gibt Sie:
Es nutzt
GetModuleFileNameW
auf Windows, analysiert/proc/self/maps
auf Linux und Android und verwendet_NSGetExecutablePath
oderdladdr
auf Mac und iOS.InformationsquelleAutor der Antwort
Java:
Auf allen Systemen (Windows, Linux, Mac OS X) funktioniert für mich nur dies:
InformationsquelleAutor der Antwort
Hinweis zu der Antwort "20, die oben in Bezug auf Mac OSX nur: Wenn eine ausführbare JAR-transformiert, um eine "app" über das OSX JAR BUNDLER, dann ist das getClass().getProtectionDomain().getCodeSource().getLocation(); wird NICHT wieder das aktuelle Verzeichnis der app, wird aber die interne Verzeichnis-Struktur von der app auf die Antwort. Diese innere Struktur ist eine app /theCurrentFolderWhereTheAppReside/Contents/Resources/Java/yourfile
Vielleicht ist dies ein kleiner bug in Java. Trotzdem muss man mit der Methode ein oder zwei, um die richtige Antwort, und beide liefern die richtige Antwort, selbst wenn die app gestartet wird, z.B. über eine Verknüpfung in einem anderen Ordner oder auf den desktop.
carl
SoundPimp.com
InformationsquelleAutor der Antwort