Directory.getCurrentDirectory() gibt das falsche Verzeichnis aus



  • Hi,

    ich versteh nicht warum ich genau jene Ausgabe bekomme. Code:

    String temp = Directory.getCurrentDirectory();
    

    Ausgabe: C:\Dokumente und Eintellungen\Name\Desktop

    Aber eigentlich liegt die betreffende cs-datei in einem ganz anderen Odner. Meinetwegen: C:\Dokumente und Einstellungen\Desktop\Base\Child\Ordner\SubOrdner\datei.cs

    Müsste ich nicht eigentlich den Pfadnamen angeziegt bekommen, in dem sich die Datei befindet? Und falls nicht, wie bekomme ich denn genau den Pfad heraus?

    mfg freaker



  • Das "Current-Directory" ist das Verzeichnis von wo der User z.B. deine Anwendung gestartet hat - also nicht unbedingt das Programmverzeichnis - und wird auch z.B. durch "Öffnen"/"Speichern" und sonstige Dialoge geändert.

    Du suchst vermutlich das Verzeichnis wo deine *.exe liegt?
    http://msdn.microsoft.com/de-de/library/system.windows.forms.application.startuppath.aspx



  • Ich finde
    string file = Assembly.GetExecutingAssembly().Location;
    besser, dann braucht man kein Forms



  • Wenn ich den letzten Tipp probieren, kommt der Compilerfehler
    "Fehler CS0103: Der Name "Assembly" ist im aktuellen Kontext nicht vorhanden."

    Fehlt da eine using-Anweisung und wenn ja, welche?



  • Lass Visual Studio das einfach machen
    Klick auf das Wort, dann erscheint am ende ein kleiner Quadrat unter dem letzten Buchstaben, da mit der Maus drüber und du kannst aus dem Popup heraus das using setzen lassen.

    ==> Das sind Basics.

    Seit ich C# Programmiere ist System.Linq das einzigste using das ich noch per Hand eingebe, für alles andere lass ich das Visual Studio machen.



  • Also das korrekte Ergebnis meiner Arbeit und der Hilfe von hier sieht wie folgt aus:

    string appfile = System.Reflection.Assembly.GetExecutingAssembly().Location;
    

    Was ich immer nicht verstehe, warum unvollständige Code-Schnipsel gepostet werden. In diesem Fall hatte nur "System.Reflection." gefehlt. Für einen Anfänger ist es jedoch entscheidend, dass ein Beispiel vollständig ist. Natürlich ist es so, dass bei umfangreichen Quellcodes ein größeres Problem besprochen wird und dann oft auch "abgekürzt" werden muss. Aber dann wird es sich bestimmt um Profis handeln. Wenn jedoch jemand fragt, wie man den aktuellen Ordner ermitteln kann, dann wird die Frage (wahrscheinlich) von einen Anfänger stammen. Dann sollten die Profis doch auch professioneller antworten - was nicht unbedingt bedeuten muss, dass die Antworten sehr lang ausfallen sollten. In diesem Fall waren es zwei "Wörter". 🙄



  • csofti schrieb:

    Was ich immer nicht verstehe, warum unvollständige Code-Schnipsel gepostet werden.

    Mit der passenden Using-Anweisung ist der Schnipsel vollständig. Hast Du den Beitrag von Mr. Evil gelesen?



  • Es ist wohl einfacher, wenn ein Anfänger den vollständigen Code sieht:

    string appfile = System.Reflection.Assembly.GetExecutingAssembly().Location;
    

    oder

    using System.Reflection;   // [b]Muss oben im Modul rein![/b]
    ...
    ...
    ...
        string appfile = Assembly.GetExecutingAssembly().Location;
    

    Beim Text von Mr Evil bleiben die Zusammenhänge doch im Text hängen.

    Mr Evil schrieb:

    Lass Visual Studio das einfach machen
    Klick auf das Wort, dann erscheint am ende ein kleiner Quadrat unter dem letzten Buchstaben, da mit der Maus drüber und du kannst aus dem Popup heraus das using setzen lassen.

    ==> Das sind Basics.

    Seit ich C# Programmiere ist System.Linq das einzigste using das ich noch per
    Hand eingebe, für alles andere lass ich das Visual Studio machen.

    🙄

    Kann ja mal jeder für sich darüber nachdenken...



  • Es hat sich allgemein so eingebürgert das die Namespaces quasi nie mit angegeben werden, eben weil die IDE diese ohnehin selbst findet und vorschlägt.
    Das ist nicht nur in diesem Forum so 😉

    Und falls die IDE das mal nicht tut* - oder man mit notepad oder sowas hantiert: google "msdn KlassenName" und man hat meist direkt als ersten Treffer die Klassenbeschreibung in der msdn wo Namespace und Referenz angegeben sind.

    (*Dann ist meistens die Referenz nicht eingebunden oder ein Compile-Versuch hilft der IDE wieder auf die Sprünge)



  • geeky schrieb:

    Es hat sich allgemein so eingebürgert das die Namespaces quasi nie mit angegeben werden, eben weil die IDE diese ohnehin selbst findet und vorschlägt.

    Naja, wenn man soviel schreibt, um einen einfachen Sachverhalt darzustellen
    (so wie Mr Evil) und ein weiteres Forums-Mitglied auch noch darauf verweist,
    dann sollte man sich Gedanken machen, ob das alles so in Ordnung ist.



  • Leute, es war einfach so das ich das Namespace nicht auswendig wusste und auch zu faul war es selber raus zu suchen.
    Da es nicht von allein gefunden wurde ging ich davon aus das die Basics im umgang mit der IDE nicht bekannt sind, entsprechend zeigte ich ein weg auf der immer funktioniert, sodass man nich bei jeder kleinen Klasse nach schauen muss wie der Namespace ist.



  • Mache die Dinge so einfach wie möglich - aber nicht einfacher. A.Einstein 😃


Anmelden zum Antworten