1

考虑这样的文件的路径:

“\\Tests\Results\knowles\project\LU\D15\RUN1\Results.xml”

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

类中是否有静态方法或其他Directory东西Path

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

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

请注意,“项目”文件夹只是一个示例,它可以是任何名称,我要说的是,我想获取在我的示例中假设代替项目的文件夹的路径。

同样,我猜我的错误,原始字符串并不总是带有固定数量的文件夹,它肯定在“项目”文件夹之后至少有一个或两个文件夹......我需要一种从左到右的方法对,我猜

4

4 回答 4

4

您可以使用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;
}
于 2012-07-25T08:09:18.553 回答
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();
于 2012-07-25T08:17:02.100 回答
1

使用正则表达式:

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;
于 2012-07-25T08:55:54.893 回答
-1

你可以使用Path类,它有很多帮助方法,试着找到一个适合你需要的。

您可以尝试使用以下代码来获取路径中的文件夹,它会给您最后一个。

string folder = Path.GetDirectoryName(@"C:\\Abc\test.xml");

举个C:\\ABC例子。

于 2012-07-25T08:16:51.650 回答