我有一个带有完整路径的文件名列表,我需要删除文件名和文件路径的一部分,考虑到我的过滤器列表。
Path.GetDirectoryName(file)
是否有部分工作,但我想知道是否有一种简单的方法可以使用.Net 2.0过滤路径来删除部分路径。
例如:
如果path + filename
等于C:\my documents\my folder\my other folder\filename.exe
,我需要的就是my folder\
以上的内容,这意味着我只需要从中提取my other folder
。
更新
过滤器列表是一个文件框,文件夹名称以,
分隔,因此我只有部分名称,如上例所示,此处的过滤器为my folder
基于Rob代码的当前解决方案:
string relativeFolder = null;
string file = @"C:\foo\bar\magic\bar.txt";
string folder = Path.GetDirectoryName(file);
string[] paths = folder.Split(Path.DirectorySeparatorChar);
string[] filterArray = iFilter.Text.Split(',');
foreach (string filter in filterArray)
{
int startAfter = Array.IndexOf(paths, filter) + 1;
if (startAfter > 0)
{
relativeFolder = string.Join(Path.DirectorySeparatorChar.ToString(), paths, startAfter, paths.Length - startAfter);
break;
}
}
答案 0 :(得分:5)
这样的事情怎么样:
private static string GetRightPartOfPath(string path, string startAfterPart)
{
// use the correct seperator for the environment
var pathParts = path.Split(Path.DirectorySeparatorChar);
// this assumes a case sensitive check. If you don't want this, you may want to loop through the pathParts looking
// for your "startAfterPath" with a StringComparison.OrdinalIgnoreCase check instead
int startAfter = Array.IndexOf(pathParts, startAfterPart);
if (startAfter == -1)
{
// path not found
return null;
}
// try and work out if last part was a directory - if not, drop the last part as we don't want the filename
var lastPartWasDirectory = pathParts[pathParts.Length - 1].EndsWith(Path.DirectorySeparatorChar.ToString());
return string.Join(
Path.DirectorySeparatorChar.ToString(),
pathParts, startAfter,
pathParts.Length - startAfter - (lastPartWasDirectory?0:1));
}
如果最后一部分是文件名,则此方法尝试计算,如果是,则删除它。
用
调用它GetRightPartOfPath(@"C:\my documents\my folder\my other folder\filename.exe", "my folder");
返回
我的文件夹\我的其他文件夹
用
调用它GetRightPartOfPath(@"C:\my documents\my folder\my other folder\", "my folder");
返回相同的内容。
答案 1 :(得分:1)
您可以使用此方法通过“\”符号(或Unix环境中的“/”)拆分路径。在此之后,您将获得一系列字符串,您可以选择所需的字符串。
public static String[] SplitPath(string path)
{
String[] pathSeparators = new String[]
{
Path.DirectorySeparatorChar.ToString()
};
return path.Split(pathSeparators, StringSplitOptions.RemoveEmptyEntries);
}