我有一个命令,可能类似于以下内容:
SYNC C:\Users\Fox Mulder\SyncClient C:\Users\Fox Mulder\SyncServer
这是一个将通过控制台应用程序输入的命令。它将由Console.ReadLine读取。
如何解析命令以便我可以获得两个单独的目录路径?
我无法分割空间,因为这将导致“Fox Mulder”分裂。
我如何轻松解析这个?
答案 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