考虑这样一个文件的路径:
“\\测试\结果\诺尔斯\项目\ LU \ D15 \ RUN1 \ Results.xml”
如何创建一个新字符串,为上面字符串中的“project”文件夹提供路径?我尝试使用FirstIndexOf("project")
,但总是失败!
Directory
或Path
类中是否存在静态方法或其他内容?
我想要一个新的字符串,其中包含“project”文件夹的路径,来自类似的字符串,如上例所示,如
var newPath = "\\\\Tests\\Results\\knowles\\project"
请注意,“project”文件夹只是一个示例,它可以是任何名称,我想要的是我想要获取文件夹的路径,该文件夹假定代替我的示例中的项目。< / p>
再次,我的错误,我想,原始字符串并不总是带有固定数量的文件夹,它确实在'project'文件夹后至少有一个或两个文件夹...我需要一种方法来接近它从左到右我猜
答案 0 :(得分:3)
您可以使用FileInfo和DirectoryInfo类。
从右到左搜索如下:
var fi = new FileInfo(""\\Tests\Results\knowles\project\LU\D15\RUN1\Results.xml"");
var di = fi.Directory;
var find = "project";
while (di.Name.ToLower() != find.ToLower() && di != null)
{
di = di.Parent;
}
if (di == null)
{
throw new Exception(string.Format("Directory with name '{0}' was not found.", find));
}
使用递归解决方案进行从左到右的搜索。这样的事情:
注意这是未经测试的,所以可能不完全正确,但我认为这通常是您想要实现的目标。
var fi = new FileInfo(""\\Tests\Results\knowles\project\LU\D15\RUN1\Results.xml"");
var di = fi.Directory;
var find = "project";
di = GetGreatestParent(di, find);
if (di == null)
{
throw new Exception(string.Format("Directory with name '{0}' was not found.", find));
}
public DirectoryInfo GetGreatestParent(DirectoryInfo Dir, string Find)
{
if (Dir != null)
{
var p = GetGreatestParent(Dir.Parent, string Find);
if (p != null)
{
return p;
}
else if (Dir.Name.ToLower() == Find.ToLower())
{
return Dir;
}
}
return null;
}
答案 1 :(得分:1)
对于此实例,请尝试此操作。
string path = @"\\Tests\Results\knowles\project\LU\D15\RUN1\Results.xml";
string folderToSearch = "project";
int index = path.IndexOf(folderToSearch);
if (index != -1)
Console.WriteLine(path.Substring(0, index + folderToSearch.Length));
else
Console.WriteLine("Folder not found in given string.");
Console.Read();
答案 2 :(得分:0)
使用正则表达式:
var projectName = "project";
var inputString = @"\\Tests\Results\knowles\project\LU\D15\RUN1\Results.xml";
var yourProjectDir = Regex.Match(inputString,
String.Format(@"\\.+{0}\\", projectName),
RegexOptions.IgnoreCase).Value;
答案 3 :(得分:-1)
你可以使用Path
课程,它有很多帮助方法,试着找到一个适合你需要的方法。
您可以尝试使用以下代码获取路径中的文件夹,它将为您提供最后一个。
string folder = Path.GetDirectoryName(@"C:\\Abc\test.xml");
例如,会给你C:\\ABC
。