2009-06-26 6 views
4

Ich habe eine Zeichenfolge mit Anführungszeichen um den Pfad wie folgt:C# String-Handling, wie erhalten Pfad und args aus einem String

"C: \ Program Files (x86) \ Windows Media Player \ wmplayer.exe" arg1 arg2

Wenn ich Text.Split(new Char[] { ' ' }, 2); verwende, dann bekomme ich den ersten Platz.

Wie bekomme ich den Pfad und die Argumente?

Antwort

2

Try Aufspaltung auf den doppelten Anführungszeichen (Text.Split (new char [] { '/ "'}, 3);). Dann in dieser Anordnung die letzte Zeichenfolge zu nehmen und Splitting wieder auf den Raum

string[] pathAndArgs = Text.Split(new Char[] { '/"' }, 3); 
string[] args = pathAndArgs[2].Split(new Char[] { ' ' }, 2); 

ich habe einen Syntaxfehler kann es in, aber Sie bekommen, was ich meine

+0

Prost Ich ging mit diesem string [] fileAndArgs = this.AppPath.Text.Split (neu Char [] { '"'}, 3); – Kaya

+1

Dies würde nicht funktionieren, wenn die Argumente sich in doppelten Anführungszeichen zu ermöglichen Sie ihnen, Leerzeichen einzufügen. (Nicht sicher, ob das hier der Fall ist: die ursprüngliche Frage wird nicht geklärt.) – peSHIr

1

Tun Sie text.split und arbeiten Sie sich vom Ende des Arrays zurück.

var input = "C:\\blah\\win.exe args1 args2"; 
var array = input.split(' '); 
var arg1 = array[array.length -2]; 
var arg2 = array[array.length -1]; 
+0

Dies würde nicht funktionieren, wenn die Argumente selbst doppelt zitiert werden, damit sie Leerzeichen enthalten können. (Nicht sicher, ob das hier der Fall ist: Die ursprüngliche Frage wird nicht geklärt.) – peSHIr

+0

Das ist ein Punkt, an den ich nicht gedacht habe. – kemiller2002

4

Verwenden Sie einen regulären Ausdruck wie:. ("".*?"")|(\S+)

So würde der Code wie etwas sein:

Regex r = new Regex(@"("".*?"")|(\S+)"); 
MatchCollection mc = r.Matches(input); 
for (int i = 0; i < mc.Count; i++) 
{ 
    Console.WriteLine(mc[i].Value); 
}