1

次のようなファイルへのパスを検討してください。

"\\Tests\Results\knowles\project\LU\D15\RUN1\Results.xml"

上記の文字列の「プロジェクト」フォルダーへのパスを与える新しい文字列を作成するにはどうすればよいですか? 私は使用しようとしましFirstIndexOf("project")たが、常に失敗します!

DirectoryまたはPathクラスに静的メソッドまたは何かがありますか?

上記の例のような同様の文字列から、「プロジェクト」フォルダーへのパスを含む新しい文字列が必要です。

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

「プロジェクト」フォルダーは単なる例であり、任意の名前にすることができます。私の例では、プロジェクトの代わりにあると思われるフォルダーへのパスを取得したいということです。

繰り返しますが、私の間違いだと思いますが、元の文字列には常に固定数のフォルダーが付属しているとは限りません。「プロジェクト」フォルダーの後に少なくとも 1 つまたは 2 つのフォルダーがあることは確かです...左から次のようにアプローチする方法が必要ですそうですね

4

4 に答える 4

4

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;
}
于 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

classを使用することもできますPath。これには多くの支援メソッドがあります。ニーズに合ったものを見つけてみてください。

次のコードを使用して、パス内のフォルダーを取得しようとすると、最後のフォルダーが表示されます。

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

C:\\ABCたとえば 、あなたに与えます。

于 2012-07-25T08:16:51.650 に答える