代码之家  ›  专栏  ›  技术社区  ›  sebagomez

如何识别字符串中的路径

  •  2
  • sebagomez  · 技术社区  · 17 年前

    只是。。。我得到一个字符串,其中包含一个文件路径和一些参数。我如何才能识别路径?我考虑了文件中“.”的索引。。。但是我不喜欢它。
    使用正则表达式怎么样?谁能给我指出正确的方向吗?


    somefile.msi/a

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

    9 回复  |  直到 17 年前
        1
  •  6
  •   Frode Lillerud    17 年前

    您可以使用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");
    }
    

    静态路径类还有一些其他方法也很有用,比如.GetFilename、.GetExtension和.GetPathRoot。

    您还可以使用System.IO.Directory和System.IO.File来实现其他功能。

        2
  •  4
  •   Bender    17 年前

    除非访问文件系统,否则无法访问,因为路径可能包含空格。

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

        3
  •  1
  •   Lasse V. Karlsen    17 年前

    在处理在字符串中查找路径之前,您需要概述一组规则,说明在这种上下文中路径是什么

    当前目录

    但仍然是一个文件名。

    这是一辆汽车吗 路径

        4
  •  1
  •   Mark    17 年前

    在这种情况下,通常的方法是按空格进行标记(并使用引号表示文件名中的空格)。然后使用/或-作为参数。我认为,使用标准的、公认的格式比只处理一部分案例要好。

        5
  •  1
  •   PhiLho    17 年前

    嗯,我认为唯一可靠的方法是访问文件系统,假设它是可访问的。
    我将在空格处剪切字符串,从末尾开始,并使用文件系统中存在的最长字符串。

    例如:

    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)
    

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

    notepad/p ,这不会简化算法,知道 C:/windows/notepad.exe 是

        6
  •  1
  •   Mark    17 年前

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

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

        7
  •  0
  •   Cory    17 年前

    任何一种原始解析方案的问题在于,尾随数据不一定是干净的。此外,您的文件名不一定没有空格、多余的“.”等。因此,无论您决定什么,都可能100%不正确。

        8
  •  0
  •   CheGueVerra    17 年前

    查看SYstem.IO.Path,您可能需要GetDirectoryName(字符串)

        9
  •  0
  •   sebagomez    17 年前

    谢谢大家的回答。。有几个帖子我想作为答案。。。在这种情况下你会怎么做?


    写这篇文章的原因是实现 private ProcessStartInfo GetProcessInfo(string uninstallString) 方法

    此项目的原因已发布 here