如何从C#中的文件路径中删除引号和命令行参数?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从C#中的文件路径中删除引号和命令行参数?相关的知识,希望对你有一定的参考价值。
我有引号的文件路径与空格文件夹名称,如下所示,至少有两个不同长度和值的命令行参数:
“C: My Program Sample Folder SubFolder2 MyApp1.exe”-parameter13XY1 -parameter101XZ2
我想只有没有引号和没有命令行参数的文件名:
C: My Program Sample Folder SubFolder2 MyApp1.exe
我会在框架中搜索像“StripQuotes”和“StripCommandLineArgs”这样的函数,但我没有发现任何类似的东西,因为框架几乎缺少所需的一切。至于引号,它可能会执行“替换”,但命令行参数不能以这种方式进行排序。文件名也包含空格,因此无法使用Split(),因为它会删除文件名的一部分。
最后我想只有没有引号和命令行参数的文件名。请注意,文件名也可以包含空格和连字符以及它的两种组合,如下所示:
“C: My Program - Win64 Sample-Folder Sub -Folder3 My App55- .exe -parameter1 -parameter2 para3”
在这种情况下,我不知道如何找出有效路径。可能还有五个命令行参数,甚至10个。
您可以使用正则表达式"^"([^"]*)".*$"
来获取带引号的字符串的内容,如下所示:
var s = ""C:\My Program\Sample Folder\SubFolder2\MyApp1.exe" -parameter13XY1 -parameter101XZ2";
var res = Regex.Replace(s, "^"([^"]*)".*$", "$1");
Console.WriteLine(res);
这是一个link to ideone。
稍微重一点的是使用命令行解析库,如http://commandline.codeplex.com/。它处理所有解析,而无需处理正则表达式。
String.Split可以为角色分割一个参数 - 所以如果你试试这个:
var array = filename.Split('"');
您应该返回一个包含两个元素的数组:
array[0] = "C:My ProgramSample FolderSubFolder2MyApp1.exe"
array[1] = "-parameter13XY1 -parameter101XZ2"
非常粗略和快速的解决方案:
string cmd = ""C:\My Program\Sample Folder\SubFolder2\MyApp1.exe" -parameter13XY1 -parameter101XZ2";
var allStrings = cmd.Split(new char[] {'"'} );
以上是关于如何从C#中的文件路径中删除引号和命令行参数?的主要内容,如果未能解决你的问题,请参考以下文章