如何识别字符串中的路径

时间:2008-11-15 13:38:17

标签: c# regex string

就是这样......我得到一个包含文件路径和一些参数的字符串。我怎样才能认出这条路?我想到了'。'的索引。在文件中...但我不喜欢它。
那么使用正则表达式呢?有人能指出我正确的方向吗?

此致

编辑:这些是有效的条目......
somefile.msi / a
C:\ MyFolder \ SomeFile.exe -i -d

我不太关心参数因为一旦我有了路径我将假设其余的是参数

9 个答案:

答案 0 :(得分:6)

您可以使用System.IO.Path,它是静态方法。

bool isPath = System.IO.Path.GetDirectoryName(@"C:\MyFolder\SomeFile.exe -i -d") != String.Empty;
if (isPath)
{
    Console.WriteLine("The string contains a path");
}

静态Path类还有其他一些有用的方法,比如.GetFilename,.GetExtension和.GetPathRoot。

您也可以使用System.IO.Directory和System.IO.File获取其他功能。

答案 1 :(得分:4)

除非您访问文件系统,否则不能这样做,因为路径可能包含空格。

因此,您可以使用File.Exists测试每个可能的“文件”。 string.Split()会在这里帮助你。

答案 2 :(得分:1)

那么,在你解决在字符串中找到路径之前,你需要勾勒出一组规则来说明这个上下文中的路径

对于操作系统,这是一个有效的文件名:a

由于未指定目录信息,因此将使用当前目录。该文件没有扩展名。

但仍然是文件名。

这是您上下文中的路径吗?或者你的意思是什么也有目录信息?

您需要处理的示例很有用。

答案 3 :(得分:1)

在这种情况下,通常的方法是用空格标记(并使用带空格的文件名的引号)。然后使用/或 - 作为参数。我认为使用标准的,可接受的格式比仅仅处理一部分案例更好。

答案 4 :(得分:1)

嗯,我相信唯一可靠的方法是访问文件系统,假设它是可以访问的。
我会在空格处剪切字符串,从结尾处开始,并采用文件系统中存在的最长字符串。

例如:

C:\My Folder\Some File.exe -i -d
=>
C:\My Folder\Some File.exe -i -d (no, although it might exist!)
C:\My Folder\Some File.exe -i    (no)
C:\My Folder\Some File.exe       (yes => That's this one)

你必须考虑PATH中的相对路径和文件(就像你的第一个例子,即所有exe文件 - 更糟糕的是,你可以在命令行上写foo.exe或foo。)。

另外,你可以经常编写像notepad/p这样的东西,它不会简化算法,知道C:/windows/notepad.exe 是XP中的有效路径! : - )

答案 5 :(得分:1)

对于非MSI程序,UninstallString传递给CreateProcess,因此您可能希望复制其确定文件名的方法。阅读http://msdn.microsoft.com/en-us/library/ms682425.aspx,特别是lpApplicationName的注释和lpCommandLine的后半部分。

MSI安装的程序有一个单独的系统(msi!MsiConfigureProduct或msi!MsiRemovePatches)。

答案 6 :(得分:0)

如果您对字符串有任何控制权,我建议您更改其表示方式。一种方法是使用URL样式的参数 - 例如fileName = myFile; arg1 = value等。然后解析密钥是微不足道的。

任何类型的原始解析方案的问题在于尾随数据不一定是干净的。你的文件名也不一定没有空格,无关的“。”等等。所以无论你决定什么,都有可能在100%的时间内不正确。

答案 7 :(得分:0)

看看SYstem.IO.Path,你可能想要GetDirectoryName(字符串)

答案 8 :(得分:0)

感谢大家的答案..有几篇帖子我想标记为答案......你在这些案件中做了什么?

以防万一有人想看看我在做什么,这是一个用来从我的电脑上卸载软件的小应用程序。我发布了代码,所以请随意下载并查看它。
这篇文章的原因是实现private ProcessStartInfo GetProcessInfo(string uninstallString)方法的好方法。

此项目的原因是here ...