在字符串中拆分多个路径

时间:2010-01-05 18:58:48

标签: c# string

我有一个命令,可能类似于以下内容:

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

这是一个将通过控制台应用程序输入的命令。它将由Console.ReadLine读取。

如何解析命令以便我可以获得两个单独的目录路径?

我无法分割空间,因为这将导致“Fox Mulder”分裂。

我如何轻松解析这个?

4 个答案:

答案 0 :(得分:7)

命令应该以空格分隔,每个路径都用引号括起来,以正确包含它们的嵌入字符串:

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)等......当然它很难看,非-performant,并且充满了潜在的问题(如果“c:\ documents”和“c:\ documents and settings”都有效会怎么样?你的代码最终会变得非常怯懦和偏执。

答案 1 :(得分:3)

使用"可以解决问题

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

这将被解释为argv中的两个单独的字符串

答案 2 :(得分:0)

这个怎么样?

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);
} 

答案 3 :(得分:0)

另一种选择是使用无效路径字符作为路径分隔符。

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