2012-10-16 22 views
7

Also ich versuche, eine Anwendung zu erstellen, die das Lesen von Skripts in einem Unterordner namens "Skripts" erfordert. Mein Code Ich habe Probleme mit:
Directory.GetCurrentDirectory() funktioniert nicht auf Linux?

string script = Console.ReadLine(); 
string path = Directory.GetCurrentDirectory(); 
string sciptpath = path + "/scripts/" + script; 

Dies funktioniert unter Windows in Ordnung. Aber unter Linux (läuft mit Mono Runtime) geht es zum aktuellen Benutzer-Home-Verzeichnis ... und nicht zum Verzeichnis der ausführbaren Datei. Ist das ein Fehler? Und kann jemand einen Workaround vorschlagen?

+0

Haben Sie in Mono-Kompatibilität gegen http://www.mono-project.com/Compatibility? Sie können auch das Mono Migration Analyzer (MoMA) -Tool ausprobieren, mit dem Sie mögliche Probleme bei der Portierung Ihrer .Net-Anwendung auf Mono (http://www.mono-project.com/MoMA) erkennen können. –

+0

Nicht Ihr Problem/Ihre Frage, aber verketten Sie keine Pfade, verwenden Sie stattdessen Path.Combine: string scriptpath = Path.Combine (Pfad, "Skripte", Skript); - Es wird sowohl auf Windows als auch auf Linux funktionieren. –

Antwort

11

Es ist nicht, dass es "reparieren" muss es ist, dass das aktuelle Verzeichnis nicht das ist, was Sie denken, dass es ist. Das aktuelle Verzeichnis ist das Verzeichnis mit dem Fokus für relative Pfade. Unabhängig davon, wo sich Ihre EXE befindet, kann Ihr aktuelles Verzeichnis irgendwo anders sein oder sich sogar während der Ausführung ändern.

Was Sie wollen, ist:

string path = Path.GetDirectoryName(Application.ExecutablePath); 
+0

danke das hat super geklappt. Ich musste eigentlich nur Directory.SetCurrentDirectory (Path.GetDirectoryName (Application.ExecutablePath)); um das Problem zu lösen. Ich danke dir sehr! – user1750201

+1

Ändern Sie das aktuelle Verzeichnis nur, wenn Sie einen guten Grund dafür haben. –

+0

Als allgemeine Regel sollten Sie das aktuelle Verzeichnis als eine vom Benutzer kontrollierte Ressource behandeln, die Sie bei der Verarbeitung von Anfragen verwenden sollten, die vom Benutzer initiiert wurden (z. B. Öffnen einer Datei aus einem Dialog in einer GUI-Anwendung)). Und Sie sollten nur ändern, wenn der Benutzer dies erwartet. Wenn Sie automatisch zusätzliche Dateien laden, die Teil Ihrer Anwendung sind, ist dies normalerweise für den Benutzer unsichtbar oder zumindest sollte der Benutzer nicht damit belästigt werden. Berechnen Sie dazu den Pfad anhand des Installationsverzeichnisses Ihrer Anwendung und verwenden Sie nicht das aktuelle Verzeichnis. –

Verwandte Themen