2

この行がありますが、最後のサブディレクトリ名とファイル名のみを取得するにはどうすればよいですか?

    label13.Text = Path.GetFileName(file1);

ファイル名のみを取得しています:test.avi Path.GetFileNameのみを使用していない場合、file1は次のようになります。

http://users/test/test/program/test/test.avi

私が取得したいのは、最後のサブディレクトリ名です: test とファイル名: test.avi したがって、label13 には次のように表示されます: test/test.avi

どうすればできますか?

4

3 に答える 3

4

ちょうど使用Path

Path.Combine(Path.GetFileName(Path.GetDirectoryName(path)), Path.GetFileName(path))
于 2013-02-01T14:18:05.200 に答える
2

文字列を分割して、結果の配列の最後の 2 つの要素を取得することもできます。

string path = "http://users/test/test/program/test/test.avi";
var elements = path.Split('/');
string result = elements[elements.Length-1] + "/" + elements[elements.Length];
System.Console.WriteLine(result);
于 2013-02-01T14:18:33.500 に答える
1

次の拡張メソッドを使用して、パス区切り文字の最後の n 番目のインデックスまでの文字インデックスを取得し、正しい部分文字列を返すことができます。

using System;
using System.Linq;

public static class StringExtensions
{
    public static int NthLastIndexOf(this string value, char c, int n = 1)
    {
        if (count < 1)
        {
            throw new ArgumentOutOfRangeException("count must be greater than 0.");
        }

        var index = 1;
        for (int i = value.Length - 1; i >= 0; i--)
        {
            if (value[i] == c)
            {
                if (index == n)
                {
                    return i;
                }
                index++;
            }
        }
        return -1;
    }
}

class Program
{
    public static string GetEndOfPath(string path)
    {
        var idx = path.NthLastIndexOf('/', 2);
        if (idx == -1)
        {
            throw new ArgumentException("path does not contain two separators.");
        }

        return path.Substring(idx + 1);
    }

    static void Main()
    {
        var result = GetEndOfPath("http://users/test/test/program/test/test.avi");
        Console.WriteLine(result);
    }
}

拡張メソッドNthLastIndexOfは、指定された Unicode 文字が最後に n 番目に出現するゼロベースのインデックス位置を返します。文字列内で少なくとも n 回文字が見つからない場合、メソッドは -1 を返します。

于 2013-02-01T14:42:26.707 に答える