C# Pfadübergabe mit Leerzeichen

ICH_BIN_LETZTER

Lt. Junior Grade
Registriert
Aug. 2007
Beiträge
490
Hallo,
vielleicht kann mir jemand helfen. Mir fehlt im Moment das geeignete Suchwort, dem entsprechend auch eine Lösung zu folgendem Problem.

Ich habe ein kleines Programm geschrieben das mir den Ordnerinhalt in eine Textdatei schreibt, mit Drag und Drop das funktioniert schön.
Jetzt möchte ich dieses Programm mit einem rechtsklick auf einen beliebigen Ordner zum laufen bringen. Hab dafür auch schon die geeigneten Registryschlüssel gefunden und angelegt. Aber wenn der Ordnername Leerzeichen enthällt wird jedes Wort als Übergabe Parameter benutzt.

Hiermit starte ich das Programm:
Code:
G:\Projekte\c#\List\List\bin\Debug\List.exe %1

hier der Codeschnippsel der darauf reagiert:
Code:
private static void Main(string[] args)
{
	if(args.Length > 0)
	{
		foreach(string s in args){
			MessageBox.Show(s);
			saveContent(getContent(new DirectoryInfo(s)));
		}
	}
	else
	{
		Application.EnableVisualStyles();
		Application.SetCompatibleTextRenderingDefault(false);
		Application.Run(new MainForm());
	}
}

Vielleicht weiß jemand eine Lösung.

Gruß
ICH_BIN_LETZTER
 
Was ist, wenn du statt foreach
for (int x=0; args[x]!=0; x++)
{
string gesamt_string +=args[x];
}
versuchst ?

Ich kann selbst kein C# und weiß nicht, ob ich das richtig verstanden habe, aber vll. hilft dir das weiter bzw. kannst du das genauer beschreiben.

Gruß,

badday
 
Zuletzt bearbeitet:
dann habe ich das problem wenn ich mehrere Ordner markiere das der Pfad nicht mehr korrekt wäre. Dann bekommt man sowas wie C:\asdasd\asdad\D:\asdad
Aber foreach macht genau das was du in der for-Schleife machst. ist bissl komfortabler, weil man nciht über die Länge gehen muss...
 
Achso, ich wusste nicht, dass du das auch mit mehreren Ordner machen willst.
Was enthält denn args genau? Dort sind ja die Pfadnamen auch nicht mehr zusammen oder?
Vielleicht musst du eher bei der Funktion ansetzen, denn ich glaube, dass der Wert, den du main übergibst nicht mehr so einfach getrennt werden kann.
Du könntest vielleicht nach einem : suchen und jedes Element des Arrays als Anfang eines neuen Pfades sehen, das einen : enthält. Ob das aber immer funktioniert möchte ich sehr stark bezweifeln.

Gruß,

badday
 
Wenn ich dein Problem verstanden habe, ist die Lösung denkbar simpel. Der Pfad, wenn er Leerzeichen enthält, gehört in " ". Das kannst du der Einfachheit halber eigentlich immer machen, das funzt auch wenn keine Leerzeichen drin sind.
 
:freak::freak::freak::freak::freak:
*doh*
ja danke das mit den Hochkommas wars... dieser Wald und das mit den Bäumen. Danke.

Lösung:
Code:
G:\Projekte\c#\List\List\bin\Debug\List.exe [B]"[/B]%1[B]"[/B]


Danke nochmal.

das mit dem PFad wiederzusammenbauen habe ich mir auch überlegt, aber das ist recht komplex. Ich dachte ne andere Lösung wäre bestimmt besser.

Gruß
 
Gern geschehen, ich kenn das ja auch :D

In C gibt es die Funktion strcat, ich wette die gibt es in C# auch, zumindest ähnlich.
Beispiel (ist jetzt natürlich C):

char buf[100] = "hello";
strcat(buf, " there");

Gibt man dann buf aus, kommt "hello there" raus, wie man sich denken kann :)

Kannste ja mal anschauen, falls du nochmal was mit zusammengebauten Pfaden versuchen willst.
 
ja klar sowas gits auch. Nur du musst ja erst das ganze Gerümpel untersuchen vonwegen wo ist da noch Pfad und wo nimmer ;) deswegen das mit den Hochkommas war das beste :D
 
Naja eigentlich ist das ja relativ simpel, wenn der zweite Wert im string nen Doppelpunkt oder der erste ein \ so ist das nen Pfadanfang, wenn beides nicht der Fall ist, hat da der Pfad nen Leerzeichen.

edith sagt: natürlich kein / sondern ein \
 
Zuletzt bearbeitet:
Ja klar, aber du musst trotzdem alles Parsen, oder mit Regex beahndeln... weil es könnte ja noch was kommen. Selbst wenn nicht, die Hochkommas in der Registry sind einfacher ;)
 
Zurück
Oben