我有这一行,我怎么才能得到最后一个子目录名和文件名?
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
我该怎么做?
答案 0 :(得分:4)
只需使用Path
:
Path.Combine(Path.GetFileName(Path.GetDirectoryName(path)), Path.GetFileName(path))
答案 1 :(得分: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);
答案 2 :(得分: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。