C# 如何将目录列表的全部或部分拆分为两个单独的字符串

C# 如何将目录列表的全部或部分拆分为两个单独的字符串,c#,split,directory,C#,Split,Directory,我找到了一个实例,需要能够拆分给定目录列表/路径的一部分。在本例中,我有路径“C:\Program Files(x86)\MyApp\Data”或“C:\Program Files\MyApp\Data\myfile.txt”,我想删除\MyApp\Data\之前的所有内容,以便将来处理时使用它 我知道我可以做一些类似于下面的事情来分割每个目录,我可以从那里重建它,但是我希望能够分割不需要的路径信息——只保留相关的字符串 string mypath = @"C:\Program Files(x8

我找到了一个实例,需要能够拆分给定目录列表/路径的一部分。在本例中,我有路径
“C:\Program Files(x86)\MyApp\Data”
或“
C:\Program Files\MyApp\Data\myfile.txt”
,我想删除
\MyApp\Data\
之前的所有内容,以便将来处理时使用它

我知道我可以做一些类似于下面的事情来分割每个目录,我可以从那里重建它,但是我希望能够分割不需要的路径信息——只保留相关的字符串

string mypath = @"C:\Program Files(x86)\MyApp\Data";
string[] directories = mypath.Split(Path.DirectorySeparatorChar); 

只需拆分MyApp\Data并删除第一个条目:

     string mypath = @"C:\Program Files(x86)\MyApp\Data";
     string[] directories = mypath.Split(new string[] {@"\MyApp\Data"},  StringSplitOptions.RemoveEmptyEntries);

     string mySavePath = mypath.Remove(0, directories[0].Length); 
     Console.WriteLine(mySavePath);

只需从所需零件开始的位置提取一个子字符串:

string s1 = @"C:\Program Files(x86)\MyApp\Data";
string s2 = @"\MyApp\Data\";

int index = s1.IndexOf(s2);
if ( index >= 0 )
{
    string end = s1.Substring(index);
    string beg = s1.Substring(0, index);
}

但请考虑,如果在两个字符串的结尾处都有一个<代码> \/COD>符号:

int index = s1.IndexOf(s2.TrimEnd('\\'));

在您开始对硬编码字符串使用正则表达式之前,请告诉我们您将使用它做什么。您正在尝试获取用户安装的应用程序的数据目录的路径吗?它存储在AppDomain DataDirectory属性中。或者你想要跑步应用程序路径?这就是
System.Reflection.Assembly.getExecutionGassembly().Location
。这两个目录中有一个是您要查找的“给定目录”吗?路径是指向已安装应用程序的数据目录。我已在注册表中查询给定路径,并试图获取特定于应用程序的路径(例如.\MyApp\Data),如果s1不包含
\MyApp\Data
,则
索引(s2)
返回-1,导致
s1出现异常。Substring
@trispid显然是这样。我想OP只需要找到正确的方向,而所有的角落案例他都能自己解决。