Jak można analizować argumenty wiersza polecenia, które mają być interpretowane jako ścieżki? arg [], zawiera łańcuchy, które są automatycznie łączone, jeżeli są podane, na przykład:C# Analiza linii poleceń cytowanych ścieżek i unikanie znaków ucieczki
example.exe jeden dwa „trzy cztery”
args[0] = one
args[1] = two
args[2] = three four
Jednakże arg [] nie właściwość analizy składniowej „C: \ Przykład \ "jako argument. Zamiast tego, poda argument jako "C: \ Przykład" "(z dodatkowym cudzysłowem). Jest to spowodowane odwróconym ukośnikiem w ścieżce traktowanej jako znak escape, a tym samym końcowym cytatem, który użytkownik podał na komendzie -line staje się częścią argumentu
.eg.
example.exe jeden "C: \ InputFolder" "C: \ OutuptFolder \"
args[0] = one
args[1] = C:\InputFolder"
args[2] = C:\OutputFolder"
Łatwym kludge może być:
_path = args[i].Replace("\"", @"\");
Jestem jednak pewien, że istnieje najlepsza praktyka. W jaki sposób można poprawnie parsować linię poleceń, która zawiera ścieżki, zapobiegając niewłaściwemu wypełnieniu tablicy args [] przez ukłucia, które zostały przetworzone na znaki ucieczki?
UWAGA: Nie chciałbym dołączyć do mojego projektu całej biblioteki parsowania linii poleceń! Potrzebuję tylko obsługi cytowanych ścieżek i chcę to zrobić w "ręczny" sposób. Proszę nie polecać NConsoler, Mono ani żadnej innej dużej biblioteki parsowania wiersza poleceń.
UWAGA: Z tego co wiem, nie jest to duplikat pytania. Podczas gdy inne pytania koncentrują się na ogólnym analizie linii komend, to pytanie jest specyficzne dla problemu, który ścieżki wprowadzają, gdy ich części są interpretowane jako sekwencje specjalne.
Gdzie dokładnie widzisz tę dodatkową postać? Używam kompilatora fragmentów. Oto główny ciąg .. string s = args [0]; \t \t Console.WriteLine (s); I działa tak, jak powinien. – shahkalpesh
@shahkalpesh: Dunno o kompilatorze kodu, ale spróbuj uruchomić go z wiersza poleceń, i podaj swój program argumentem kończącym się na \ "(backslash-doublequote) .Obowiązek ebwi, otworzył mi oczy –
Dostaję to teraz. Przepraszam, że nie zrozumiałem poprawnie argumentu wejściowego – shahkalpesh