1

「$/Folder1/Folder2/Folder3/File.xml」というパスがあります。パスから「File.xml」を引いたもの、つまり「$/Folder1/Folder2/Folder3」を取得したいと考えています。

私は次の方法を書きました、

public string GetFilePathFromFolderPath(string serverPath)
    {
        var folders = serverPath.Split('/').ToList();

        folders.RemoveAt(folders.Count - 1);


        return folders.Aggregate(string.Empty,
                                 (current, folder) =>
                                 !string.IsNullOrEmpty(current)
                                     ? string.Format("{0}/{1}", current, folder)
                                     : string.Format("{0}", folder));
    }

これを行うより良い方法はありますか?

私の単体テストは正常に動作しますが、簡単な方法があるかどうか知りたいです...

[TestMethod()]
    public void GetRootPathFromConfigFilePath_Validate()
    {
        var t = new Twrar();
        var a = t.GetFilePathFromFolderPath("$/Quan/Maa/CSr/mai.py");
        Assert.IsTrue(a == "$/Quan/Maa/CSr");
    }
4

2 に答える 2

1

Windowsでは「\」ですが、「/」をパス区切り文字として使用するつもりだと思います。

Dim s = "$/Quan/Maa/CSr///mai.py"
Console.WriteLine(System.IO.Path.GetDirectoryName(s).Replace("\"c, "/"c))

出力$/Quan/Maa/CSr

以下は、Tarun Arora の編集です。

C#の場合、これは...

public string GetFilePathFromFolderPath(string serverPath)
    {            
        return Path.GetDirectoryName(serverPath).Replace("\\", "/");
    }

そして、私の単体テストはすべてこれに合格します...

[TestMethod()]
    public void GetRootPathFromConfigFilePath_Validate()
    {
        var t = new TfsWrapper();
        var a = t.GetFilePathFromFolderPath("$/Quan/Maa/CSr/mai.py");

        Assert.IsTrue(a == "$/Quan/Maa/CSr");
    }

    [TestMethod()]
    public void GetRootPathFromConfigFilePath_SmallPath()
    {
        var t = new TfsWrapper();
        var a = t.GetFilePathFromFolderPath("$/Quan/mai.py");

        Assert.IsTrue(a == "$/Quan");
    }

    [TestMethod()]
    public void GetRootPathFromConfigFilePath_RootPath()
    {
        var t = new TfsWrapper();
        var a = t.GetFilePathFromFolderPath("$/mai.py");

        Assert.IsTrue(a == "$");
    }
于 2012-11-18T17:22:28.020 に答える