如何从目录字符串中仅获取最后一个子目录名称和文件名

本文关键字:子目录 最后一个 文件名 获取 字符串 | 更新日期: 2023-09-27 17:56:55

我有这一行,如何只获取最后一个子目录名称和文件名?

    label13.Text = Path.GetFileName(file1);

我只得到文件名:测试.avi如果我不使用仅 Path.GetFileName file1,我会得到类似的东西:

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

我想得到的是最后一个子目录名称:test和文件名:test.avi所以在标签13中,我会看到:测试/测试.avi

我该怎么做?

如何从目录字符串中仅获取最后一个子目录名称和文件名

仅使用 Path

Path.Combine(Path.GetFileName(Path.GetDirectoryName(path)), Path.GetFileName(path))

您还可以拆分字符串并获取结果数组的最后 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);

可以使用以下扩展方法检索路径分隔符倒数第 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。