2

我需要为文件路径列表中的每个项目捕获一个子字符串。我循环的列表在文件系统中不存在,所以我不能使用 Path 类。我想从字符串的末尾开始解析,并在到达第一个“/”时停止。我已经尝试过 .Substring() 和 .Split() 但两种方法似乎都无法匹配指定的模式或从右到左读取。

示例:一些目录/一些子目录/SomeFile.pdf

我想捕获“SomeFile.pdf”

4

3 回答 3

10

您应该改用Path该类。

例如:

string path = "Some Directory/Some SubDirectory/SomeFile.pdf";
string fileName = System.IO.Path.GetFileName(path);

演示

编辑:只是为了回答你原来的问题如何“从右到左阅读”:

您可以String.Substring使用String.LastIndexOf

string fileName = path.Substring(path.LastIndexOf("/") + 1);

演示

(但是,Path如果您使用路径,请使用该类)

于 2013-06-03T21:10:15.347 回答
0
Path.GetFileName(path) 

使用 Path 类是最简单、最正确、最安全的方式。但是,如果您想从字符串的末尾或从右到左解析,一种方法是反转字符串并解析它。

反转字符串,搜索“/”,获取子字符串,反转你的子字符串,你就得到了你要找的东西。

示例:使用您的路径调用 GetFileNameFromPath 方法,它将打印 SomeFile.pdf。

using System;
public class Test
{
    public static void Main()
    {
        string path = "Some Directory/Some SubDirectory/SomeFile.pdf";
        string fileName = GetFileNameFromPath(path);
        Console.WriteLine(fileName);
    }
    public static string GetFileNameFromPath(string path)
    {
        string fileName = string.Empty;
        path = path.ReverseString();
        fileName = path.Substring(0, path.IndexOf(@"/"));
        fileName = fileName.ReverseString();
        return fileName;
    }
}

public static class StringExtension
{
    public static string ReverseString(this string s)
    {
        char[] arr = s.ToCharArray();
        Array.Reverse(arr);
        return new string(arr);
    }
}
于 2013-06-03T21:18:18.293 回答
0

如果您实际上将其视为文件/文件夹信息,则使用 Path 是最好的,但如果您将其视为恰好想在 '/' 处拆分的字符串,那么您可以先拆分然后反转:

string str = "Some Directory/Some SubDirectory/SomeFile.pdf";
string[] terms = str.Split('/');
Array.Reverse(terms);
foreach (string term in terms)
{
    Console.WriteLine(term);
}
于 2013-06-03T21:29:41.740 回答