Entwickler-Ecke
C# - Die Sprache - Mit Buttonclick Ordner öffnen: Pfad angabe mit Variable mög?
blauerpanta - Mi 14.09.11 17:02
Titel: Mit Buttonclick Ordner öffnen: Pfad angabe mit Variable mög?
Hallo C#
Ich will nun keine langen Reden schwingen. Ergo gehts direkt zur Sache.
Via ButtonClick soll ein Ordner geöffnet werden.
Dies geschieht bei mir mit
Zitat: |
System.Diagnostics.Process.Start("explorer", @"c:\Programme") ; |
Meine Frage ist nun:
In einem Textfeld wird vorher eine Nummer eingegeben. Diese Nummer bekommst gleichzeitig auch einen Ordner in meinem Pfad.
Das heißt wenn der User "123" eintippt soll er via Click auf den Button in den Pfad c:\Programme\123 gelangen und diesen Ordner 123 öffnen.
Ich habe versucht den Wert in dem Textfeld als String irgend wie in den Code zu integrieren aber ich glaube ich bin auf dem Holzweg.
wenn noch irgend etwas unklar ist fragt mich.
gruß blauerpanta
Ralf Jansen - Mi 14.09.11 17:11
C#-Quelltext
1: 2: 3:
| string folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ProgramFiles), meineLiebeTextBox.Text); if(Directory.Exists(folder)) System.Diagnostics.Process.Start("explorer", folder); |
blauerpanta - Mi 14.09.11 17:39
erstmal dankeschön fürs fixe antworten.
nun geht er immernoch in den OberOrdner aber nicht in den Ordner den ich in der Textbox vorher eingegeben hab.
aber mein Virsual Studio bemäkelt das "Path" im aktuellen kontext nicht vorhanden sei.
Ralf Jansen - Mi 14.09.11 17:51
Path ist eine Klasse aus dem System.IO Namespace. In der Datei mit diesem Code sollte also ein 'using System.IO;' drüberstehen bzw. du solltest es dahin schreiben.
Du kannst aber auch einfach auf dem Path Bezeichner mal das Contextmenü öffnen und die 'Resolve' (bzw. das deutschsprachige Äquivalent) Methode aufrufen dann werden die benötigten usings automatisch hinzugefügt.
blauerpanta - Do 15.09.11 11:21
So das läuft nun soweit.
Nun hab ich noch eine frage. Kann man den "SpecialFolder" noch welche hinzufügen ?
Nun funktioniert es ja nur wenn der eingegebene Order 123 sich auch in Programme befindet.
Wenn ich nun aber einen Ordner in ansprechen will der sich in einem weiteren unter Order befindet wie stelle ich das dann an ?
Ralf Jansen - Do 15.09.11 12:03
Wenn man irgendwas den SpecialFoldern hinzufügen könnte wären es wohl kaum noch ~Special~ Folders sondern nur irgendwelche Folder.
Keiner zwingt dich Environment.GetFolderPath mit den SpecialFoldern zu verwenden denn habe ich nur eingebaut da 'C:\Programme' zu verwenden ausgesprochen unglücklich ist. Weder muss der auf C liegen noch Programme heißen. Du kannst aber jeden beliebigen Pfad aus beliebig vielen Einzelteilen zusammenbauen. Dabei hilft die im Code gezeigte Path.Combine Methode die man gegebenenfalls auch mehrfach aufrufen kann um weitere Unterordner dem Pfad hinzuzufügen.
blauerpanta - Do 15.09.11 14:23
tut mir leid ich steh noch immer auf dem Schlauch..
C#-Quelltext
1: 2:
| String folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Textbox.Text); System.Diagnostics.Process.Start("Explorer", folder); |
so öffnet sich nur dier Ornder "123" aus der Textbox wenn er sich in MyDocuments befindet. wie hänge ich nun da einen Pfad dran ?
zb. Mydocuments\test1\test2, Textbox.Text); iwie so
Ralf Jansen - Do 15.09.11 15:18
C#-Quelltext
1: 2: 3:
| String folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "test1"); folder = Path.Combine(folder , Textbox.Text); System.Diagnostics.Process.Start("Explorer", folder); |
Wie gesagt kannst du Path.Combine mehrfach ausführen solange bis du deinen Gesamtpfad zusammen hast.
blauerpanta - Fr 16.09.11 12:23
Aber die Path.Combine Methode nimmt nicht mehr als 2 Argumente an.
Wie kann man das dann Trixen ?
C#-Quelltext
1:
| MyDocuments\test1\test2\!textboxinhalt\test3 |
wenn ich nun in test3 reinkommen möchte ?
Man könnte nun die Strings mit einander verbinden und die dann wieder miteinander ausgeben aber die,
C#-Quelltext
1:
| System.Diagnostics.System.Start("explorer", |
nimmt auch nur 2 Argumente an.
Ralf Jansen - Fr 16.09.11 12:40
Wie das geht sollte doch mehr als offensichtlich sein oder?
Wenn
C#-Quelltext
1: 2:
| String folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "test1"); folder = Path.Combine(folder , Textbox.Text); |
MyDocuments\test1\textboxinhalt liefert
dann liefert
C#-Quelltext
1: 2:
| String folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), Textbox.Text); folder = Path.Combine(folder , "test1"); |
MyDocuments\textboxinhalt\test1.
Also einfach die Reihenfolge ändern in dem du die Teile an den Pfad hängst.
Das dir das nicht selbst auffällt lässt auf ein Mangel an Debuggingfähigkeiten schließen. Vielleicht solltest du deine entsprechenden Fähigkeiten erst verbessern dann wird dir der Rest wesentlich einfacher fallen. Also einfach mal an den Start deines Codes einen Breakpoint setzen und deine Anwendung mit F5 starten und dann schrittweise durchgehen. Wenn du währenddessen die verschiedenen Variablen im Locals und oder Watch Fenster beobachtest sollte sich der ein oder andere Aha-Effekt einstellen.
blauerpanta - Mo 19.09.11 10:38
..scheinbar hast du mich missverstanden.
Ich möchte nicht den Pfad vertauschen oder ähnliches.
also nochmal ich möchte zb. in
C#-Quelltext
1:
| MyDocuments\test1\test2\!textboxinhalt\test3 |
rein.
das heißt SpecialFolder\test1\test2\textbox\test3.
Das Programm soll in jedem fall in test1\test2 rein dann soll der ORdner ausgewählt werden der zuvor in der Textbox eingegeben wurde.
Dann soll er in den Order Test3. Test1,2,3 sind also immer gleich.
Die Frage war nun wie ich die Order 1,2,3 an den Pfad anhängen kann und dazu noch dazwischen den Variablen Ordner.
btw: deine spitzfindige Bemerkung finde ich als Antwort auf eine Frage in einem Forum ziemlich unpassend. Was meint du warum ich mich hier angemeldet hab ?.. fand ich schon ziemlich daneben.
gruß panta
Horschdware - Mo 19.09.11 10:46
@Blauer Panther:
Du hast schon alle nötigen Informationen bekommen, um dein Problem lösen zu können. Ab hier ist wohl ein wenig einenständiges Denken von Nöten. Dem Beitrag von Ralf Jansen ist eigentlich nichts hinzuzufügen - spitzfindug unpassend ist der übrigens nicht.
Aber um es nochmal langsam zu machen:
Was brauchst du? Du benötigst den Pfad
MyDocuments\test1\test2\<Textboxinhalt>\test3
a) Wie kommst du an "MyDocuments"?
b) Wie hängst du Teilpfade an einen bereits existierenden?
a und b sollten bekannt sein.
Also ist dein Vorgehen:
- ermittle MyDocuments
- hänge "test1" an
- hänge "test2" an
- hänge <Textboxinhalt> an
- hänge "test3" an
fertig
Wo und an welcher Stelle dieses Ablaufes ist dir jetzt etwas unklar?
Ralf Jansen - Mo 19.09.11 10:55
Zitat: |
..scheinbar hast du mich missverstanden. |
Nein. Oder ich tu es immer noch. Einfach die Einzelteile deines Pfades aus den Einzelteilen zusammensetzen und dort wo du einen Variablenteil hast eine Variable einsetzen wie zum Beispiel Textbox.Text.
C#-Quelltext
1: 2: 3: 4:
| String folder = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "test1"); folder = Path.Combine(folder , "test2"); folder = Path.Combine(folder , Textbox.Text); folder = Path.Combine(folder , "test3"); |
Zitat: |
deine spitzfindige Bemerkung |
Ich kenne dich nicht und du kennst mich nicht ich kann nur mit dem arbeiten was du hier sagst und zeigst. Und mit diesen Infos habe ich versucht mir ein Bild zu machen und zu helfen. Wenn du meine pädagogische Bemerkung spitzfindig findest kann ich nur sagen das es nicht die Absicht war sondern nur den Eindruck wiedergibt den ich aus dem gelesenen bekommen hatte.
Th69 - Mo 19.09.11 11:01
Hallo blauerpanta,
Ralf Jansen hat dir genau den richtigen Rat gegeben. Der Debugger ist das wichtigste Werkzeug für einen Programmierer - und das Anwenden des Debuggers kann dir keiner abnehmen.
Und wenn du .NET 4 verwendest, dann kannst du sogar Path.Combine mit mehr als 2 Parametern aufrufen, s.
http://msdn.microsoft.com/de-de/library/system.io.path.combine.aspx
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!