directory listening
-
if (theString.Contains("dirx") && pw == 1) { if (theString == "dirx " || theString == "dirx" || theString == "DIRX " || theString == "DIRX") { sww.WriteLine("Kein Parameter angegeben"); sww.Flush(); goto back; } arInfo = theString.Split(splitter); string[] str = Directory.GetDirectories(arInfo[1]); for (int i = 0; i <= 30; i++) { try { MessageBox.Show(str[i]; } catch { goto back; } }
Nun meine Frage.
Alles funktioniert prima bis!
der User ein Pfad eingibt in dem Leerzeichen drinnen sind also z.B.:
C://Dokumente und EinstellungenNun meine Frage, wie muss ich umscripten, dass auch dann in das Verzeichnis gewechselt wird?
thx xx
-
Vielleicht wäre es hilfreicher, wenn Du sie stelle posten würdest, an der die Usereingabe abgefragt wird, also anscheinend Deine Variable "thestring" vom User gefüllt wird.
Ansonsten- Listing != Listening -> www.leo.org und versuche auf goto Statements zu verzichten.
-
Hallo !
Ich weiß natürlich jetzt nicht wie komplex Du Deine Parameteraufrufe gestalten möchtest und wieviele Parameter man überhaupt Deinem Programm übergeben kann, aber das Einfachste wäre, Deine Verzeichnisstruktur in " (Anführungszeichen) zu setzen. Also wie folgt :
dirx "c:\Dokumente und Einstellungen\User\Eigene Dateien"
Aber als kleine Anmerkung sei gesagt, dass die Abfrage des Befehls "dirx" in allen möglichen Groß- und Kleinschriftvarianten sehr umständlich programmiert ist. Eigentlich wird der zu überprüfende String auf ToLower() gesetzt und dann auf "dirx" gecheckt. Somit ist es egal wie der User den Befehl schreibt - auch bei "DiRx" !!!
Und zweitens solltest Du nicht mit "goto"-Befehlen in Deinem Quellcode arbeiten, da sonst schnell die Gefahr besteht, dass man eine Endlosschleife programmiert !!!Sollte die obige Lösung nicht ausreichen bzw. Du mehrere Parameter als nur das Zielverzeichnis verwendest, dann poste hier nochmal. Es gibt noch andere Möglichkeiten eine saubere Parameterübergabe zu gestalten.
Gruß Ernst
-
am ok!
Das mit den " habe ich schon versucht - leider erfolglos!
das mit to.lower() habe ich auch eingebaut bit thx schon mal.leider klappt das andere immer noch nicht
lg
-
Also, wie gesagt weiß ich nicht was Du eigentlich programmieren möchtest. Sollte es aber so etwas wie ein erweiterter DOS-Befehl (ähnlich dem DIR-Befehl) sein, dann würde ich dies als Konsolen-Anwendung folgendermaßen programmieren :
using System; using System.IO; namespace dirx { class Program { static void Main(string[] args) // Übergabeparameter im String-Array { if (args.Length < 1) // Überprüfen ob Parameter vorhanden { Console.WriteLine("Kein Parameter angegeben !"); return; } foreach (string dir in Directory.GetDirectories(args[0])) { Console.WriteLine(dir); // Alle Verzeichnisse ausgeben } } } }
Den Projektname der Konsolen-Anwendung bezeichnest Du als 'dirx'. Ist auch logisch, da Du Dein Programm aus der Eingabeaufforderung mit 'dirx' aufrufen möchtest (natürlich erst, wenn Du in der Eingabeaufforderung per CD-Befehl in Dein Debug-Verzeichnis gewechselt hast).
Der Aufruf erfolgt dann mit : dirx c:\ oder dirx "c:\Dokumente und Einstellungen"
Gruß Ernst
-
try { MessageBox.Show(str[i]; } catch
also gaanz ehrlich ... klammer zu??
if (theString == "dirx " || theString == "dirx" || theString == "DIRX " || theString == "DIRX")
besser =
theString.Trim(); if(theString.ToUpper() == "DIRX")
und nun noch was zu den variablennamen..
theString ist ein name der lässt sich nicht oft verwenden..
was machst du wen du dann 5 strings bennen willst?nun zu dem echten fehler
arInfo = theString.Split(splitter);
ich nehme an das splitter ein leerzeichen ist und das dann den fehler erklären würde.
nun eine möglichkeit ist erst zu prüfen ob der string mit etwas bestimmten startet (z.B. dirx) der befehl hierzu wäre dann
if (theString.ToUpper().Trim().StartsWith("DIRX") && pw == 1)
das vermeidet fehler wenn du ein verzeichnis angibst das dirx genannt wurde..
(die sache mit den Contains()...)und nun trennst du den start (dirx) vom rest des körpers so:
theString.Remove(0, 4).Trim();
und nun noch ein was:
string[] str = Directory.GetDirectories(theString)
und der rest dürfte gehen..