从路径字符串中获取特定文件夹

时间:2012-07-25 08:07:02

标签: c# string path directory

考虑这样一个文件的路径:

“\\测试\结果\诺尔斯\项目\ LU \ D15 \ RUN1 \ Results.xml”

如何创建一个新字符串,为上面字符串中的“project”文件夹提供路径?我尝试使用FirstIndexOf("project"),但总是失败!

DirectoryPath类中是否存在静态方法或其他内容?

我想要一个新的字符串,其中包含“project”文件夹的路径,来自类似的字符串,如上例所示,如

var newPath = "\\\\Tests\\Results\\knowles\\project"

请注意,“project”文件夹只是一个示例,它可以是任何名称,我想要的是我想要获取文件夹的路径,该文件夹假定代替我的示例中的项目。< / p>

再次,我的错误,我想,原始字符串并不总是带有固定数量的文件夹,它确实在'project'文件夹后至少有一个或两个文件夹...我需要一种方法来接近它从左到右我猜

4 个答案:

答案 0 :(得分:3)

您可以使用FileInfoDirectoryInfo类。

从右到左搜索如下:

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