从字符串中查找文件路径

时间:2016-12-27 05:54:50

标签: c#

我正在获取启动应用程序的列表,并希望仅在启动时运行应用程序的路径。启动应用程序列表还包含传递给应用程序的参数,它们采用不同的模式;例子是

  

C:\ Program Files(x86)\ Internet Download Manager \ IDMan.exe / onboot

     

“C:\ Program Files \ Process Hacker 2 \ ProcessHacker.exe”-hide

     

“C:\ Program Files \ CCleaner \ CCleaner64.exe”/ MONITOR

     

“C:\ Program Files(x86)\ Google \ Chrome \ Application \ chrome.exe”--no-startup-window / prefetch:5

     

“C:\ Program Files(x86)\ GlassWire \ glasswire.exe”-hide

     

C:\ Program Files \ IDT \ WDM \ sttray64.exe

我正在尝试使用以下正则表达式

Regex.Matches(input, "([a-zA-Z]*:[\\[a-zA-Z0-9 .]*]*)");

请指导我如何仅提取忽略所有参数和其他启动命令的应用程序路径。

3 个答案:

答案 0 :(得分:2)

由于预期的输入列表将包含可执行文件列表,所有文件都具有.exe扩展名,因此我们可以在此处使用该扩展名来起诉String类的.Substring()方法。样本用法如下:

 List<string> inputMessageStr = PopulateList(); // method that returns list of strings
 List<string> listofExePaths= inputMessageStr.Select(x=> x.Substring(0, x.IndexOf(".exe") + 4)).ToList();

答案 1 :(得分:2)

尝试这种简单的方法:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:descendantFocusability="blocksDescendants"
android:layout_width="match_parent"
android:layout_height="match_parent">

答案 2 :(得分:1)

有许多情况可能会破坏从给定字符串中查找完整可执行路径的常规方法。 简单地查找".exe"在一般情况下不起作用。至少一个空格将实际完整的可执行路径与参数分开。

注意:此解决方案基于可执行文件将出现在其预期路径上的假设。由于OP具有启动时运行的应用程序路径列表,因此该假设成立。

public string GetPathOnly(string strSource)
{
    //removing all the '"' double quote characters
    strSource.Trim( new Char[] {'"'} );

    int i;
    string strExecutablePath = "";
    for(i = 0; i < strSource.Length; ++i)
    {
        if(strSource[i] == ' ')
        {
            if(File.Exists(strExecutablePath))
            {
                return strExecutablePath;
            }               
        }
        strExecutablePath.Insert(strExecutablePath.Length, strSource[i]);
    }

    if(File.Exists(strExecutablePath))
    {
        return strExecutablePath;
    }

    return "";  // no actual executable path found.
}