2012-09-06 16 views
6

Miałem to pytanie dotyczące Passing command line arguments in C#.Przekazywanie tablicy argumentów w linii poleceń

Ale w moim przypadku muszę przekazać tablicę parametrów do wywołującego pliku .exe.

np.

var arr = new string[] {"Item title","New task","22","High Priority"} 

Czy jest możliwe aby użyć Process.Start() z exe ścieżkę wraz z tablicy

mam .exe ścieżka

const string path = @"C:\Projects\Test\test.exe"; 

Dzięki

+1

Możliwy duplikat [Argumenty wiersza poleceń Escape w języku C#] (http://stackoverflow.com/questions/5510343/escape-command-line-arguments-in-c-sharp) – quetzalcoatl

+1

Większość odpowiedzi na to pytanie jest błędna, zły, niekompletny lub po prostu mniej lub bardziej niebezpieczny, gdy argumenty zawierają znaki specjalne, takie jak cudzysłów lub cudzysłowy. Proszę zobaczyć [tę odpowiedź] (http://stackoverflow.com/a/6040946) – quetzalcoatl

Odpowiedz

2

Spróbuj tego:

 var arr = new string[] {"Item title", "New task", "22", "High Priority"}; 
     const string path = @"C:\Projects\Test\test.exe"; 
     const string argsSeparator = " "; 
     string args = string.Join(argsSeparator, arr); 

     Process.Start(path, args); 
+10

A skąd on wie, czy przestrzeń jest częścią argumentu czy separatora? : D –

+2

@GrzegorzWilczura to może 'ciąg args = string.Join (" ", arr.Select (e =>" \ "" + e + "\" "));'? – wasyl

+2

@GrzegorzWilczura Jeśli separator nie jest spacją, może użyć dowolnego innego separatora :) po prostu zmień const. Dzięki za komentarz. –

0

Nie jest możliwe, aby przekazać tablicę jako argument, można przekazać ciąg z Separator:

ProcessStartInfo info = new ProcessStartInfo(); 
info.Arguments = "Item title,New task,22,High Priority" 
0

Jedną z opcji jest, aby umieścić tablicę w jeden ciąg, dlatego jest postrzegana jako jeden argument metody. W swojej metodzie możesz następnie przeanalizować ten jeden argument. Coś jak:

"Item title, New task, 22, High Priority" 

można wykorzystywać istniejącą tablicę wykonując:

var arrAsOneString = string.Join(", ", arr); 

Wewnątrz metody, wykonaj następujące czynności:

var values = argument.Split(',').Select(x => x.Trim()); 

dodałem wykładzinę do rezygnacji ze spacjami.

Powiązane problemy