Autor |
Beitrag |
blauerpanta
Hält's aus hier
Beiträge: 6
|
Verfasst: Mi 14.09.11 17:02
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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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); |
Für diesen Beitrag haben gedankt: blauerpanta
|
|
blauerpanta 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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 
Hält's aus hier
Beiträge: 6
|
Verfasst: 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
      
Beiträge: 744
Erhaltene Danke: 54
Win XP Pro, Win 7 Pro x64
Delphi 7, Delphi XE, C++ Builder 5, SAP R/3
|
Verfasst: 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?
_________________ Delphi: XE - OS: Windows 7 Professional x64
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: 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
      

Beiträge: 4796
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: 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. msdn.microsoft.com/d...io.path.combine.aspx
|
|