Ich hoffe, dass jemand erklären kann, warum Directory.GetCurrentDirectory() verschiedene Ergebnisse zurückgibt, basierend darauf, wie ich meine Befehlszeilenargumente an die Anwendung übergeben (mit Argumenten einen Ordner auf der app.exe)Directory.GetCurrentDirectory() gibt verschiedene Ergebnisse basierend auf Befehlszeilenargumente zurück
zu springen rechts in denen es dieses Stück Code betrachtet vs ziehen:
public class Program
{
static void Main(string[] args)
{
Console.WriteLine("The current directory is {0}", Directory.GetCurrentDirectory());
if(args != null && args.Any())
Console.WriteLine("Command line arguments are {0}", String.Join(", ", args));
Console.ReadLine();
}
}
Wenn Sie erstellen und ausführen dies die Eingabeaufforderung, wie unten dargestellt ist der Ausgang was Sie erwarten würden. Es wird Ausgang das aktuelle Verzeichnis der Anwendung in residiert.
C:\Projects\ArgumentTest\ApplicationA\bin\Debug\ApplicationA.exe C:\mydirectory
The current directory is C:\Projects\ArgumentTest\ApplicationA\bin\Debug\
Command line arguments are C:\mydirectory
Wenn Sie bauen und dieses Programm ausführen, indem Sie Dateien oder Ordner über die Anwendung Ziehen Sie unterschiedliche Ergebnisse erhalten. Statt das erwartete Ergebnis zurückzugeben, gibt Directory.GetCurrentDirectory() den Pfad zur ersten Datei zurück, die Sie über die Anwendung gezogen haben.
Ich habe derzeit eine Arbeit für dieses Problem, aber ich bin gespannt zu verstehen, warum dies geschieht.
Weitere Informationen:
- .NET 4.5
- Windows-2012R2 (Virtual Machine)
- Volladministratorrechte auf der Maschine
Hoffentlich jemand einen Einblick bieten können.
+1. Es kann nützlich sein, hinzuzufügen, dass, wenn das gewünschte Verhalten ist, den EXE-enthaltenden Ordner zu erhalten, es nützlich sein könnte, Process.GetCurrentProcess() zu nennen. MainModule.FileName oder Assembly.GetExecutingAssembly(). Location, um diese Information zu erhalten. –
Danke Marc. Ich glaube, ich habe das GetDirectory() nicht vollständig verstanden, da ich es nie von außerhalb meiner laufenden Anwendung aufgerufen habe. – Svenkle