расщепление нескольких путей в строке - PullRequest
0 голосов
/ 05 января 2010

У меня есть команда, которая может выглядеть следующим образом:

SYNC C:\Users\Fox Mulder\SyncClient C:\Users\Fox Mulder\SyncServer

Это команда, которая будет введена через консольное приложение. Это будет прочитано Console.ReadLine.

Как мне разобрать команду, чтобы я мог получить два отдельных пути к каталогам?

Я не могу разделить по пространству, потому что это приведет к разделению в "Fox Mulder".

Как я могу легко разобрать это?

Ответы [ 4 ]

7 голосов
/ 05 января 2010

Команда должна быть разделена пробелом, каждый путь должен быть заключен в кавычки, чтобы правильно включить их встроенные строки:

SYNC "C:\Users\Fox Mulder\SyncClient" "C:\Users\Fox Mulder\SyncServer"

Если вы не можете запрашивать кавычки, тогда все становится намного более безобразным - рассмотрите пути, такие как

c:\documents and settings\mom and dad\documents\family vacations\2009\the bahama ramas\

Расщепление строки на "" будет головной болью. Метод грубой силы должен был бы проверить первую часть пути (c: \ documents) самостоятельно, если он недействителен, затем добавить следующую часть (c: \ documents and) и т. Д. ... конечно, это уродливо, не -производительный и полон потенциальных проблем (что, если оба «c: \ documents» и «c: \ documents and settings» действительны? Ваш код будет очень капризным и параноидальным.

3 голосов
/ 05 января 2010

Использование " решит это

SYNC "C:\Users\Fox Mulder\SyncClient" "C:\Users\Fox Mulder\SyncServer"

это будет интерпретировано как две отдельные строки в argv

0 голосов
/ 05 января 2010

Другой вариант - использовать недопустимый символ пути в качестве разделителя пути.

SYNC C:\Users\Fox Mulder\SyncClient?C:\Users\Fox Mulder\SyncServer
0 голосов
/ 05 января 2010

Как насчет этого?

string testString = @"SYNC C:\Users\Fox Mulder\SyncClient C:\Users\Fox Mulder\SyncServer";

int firstIndex = testString.IndexOf(Path.VolumeSeparatorChar);
int secondIndex = testString.LastIndexOf(Path.VolumeSeparatorChar);
string path1, path2;

if (firstIndex != secondIndex  && firstIndex != -1)
{
    path1 = testString.Substring(firstIndex - 1, secondIndex - firstIndex);
    path2 = testString.Substring(secondIndex - 1);

    Console.WriteLine("Path 1 = " + path1);
    Console.WriteLine("Path 2 = " + path2);
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...