如何从路径中提取文件名

4

我有一个字符串值,它是/Images/She.jpg。我只想要/images/后面的部分,即She.jpg。如何将该部分提取为字符串?

6个回答

16
string filename = System.IO.Path.GetFileName("/Images/She.jpg");

你能告诉我如何删除那个文件吗? - vinay teja reddy
1
当然,你可以使用System.IO.File.Delete方法来删除它。 - Zbigniew
请确保path路径正确。 - Zbigniew
它不会删除文件夹吗?它只会删除该文件夹中的文件吗?抱歉,只是一个小疑惑。 - vinay teja reddy
是的,它只会删除文件,如果您想要删除文件夹,则需要使用 System.IO.Directory.Delete - Zbigniew

5

如果你在处理路径,应该使用其他答案。如果你只是在处理普通字符串,可以使用以下代码:

string filePath = "/Images/She.jpg";
string fileName = filePath.Substring(filePath.LastIndexOf("/") + 1);

即使在处理普通字符串时,您也应该使用Path类。如果您得到的文件是相对于当前目录的,例如“ She.jpg”,那么会发生什么? - dlras2

0
只要您的路径不太复杂,例如在文件名后面有查询参数,这个方法就能够使用。
Path.GetFileName("/Images/She.jpg")

0

我喜欢之前发布的 GetFileName 答案。

另外,你也可以使用 IndexOf 和 Substring 手动解析字符串。我已经包含了多个变量,以便更容易地看到解析字符串的步骤。

var source = "/images/she.jpg";
var key = "/images/";
var target = source.IndexOf(key);
var start = target + key.Length;
var length = source.Length - start;
var result = source.Substring(start, length);

0

仅仅是为了好玩,你也可以将字符串分割成数组,并获取数组中的最后一个元素...

string path = "/Images/She.jpg";
string[] arr = path.Split('/');
string filename = arr[arr.Length - 1];

或者如果您更喜欢一行代码

string path = "/Images/She.jpg";
string filename = path.Split('/').Last();

这将返回

She.jpg

-1

嗯,你可以从字符串的末尾向后移动。

    private string GetFileName(string path)
    {
        string filename = null;

        for (int i = (path.Length - 1); i > -1; --i)
        {
            if (path[i].ToString() == "/")
            {
                for (int x = (i + 1); x < (path.Length); ++x)
                {
                    filename += path[x];
                }

                break;
            }
        }

        return (filename);
    }

这个函数从字符串的最后一个字符开始逆序查找,直到遇到'/'为止。然后,它将'/'之后的所有字符相加,并将结果返回给你。


1
多么复杂的方法。 - CesarGon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接