我需要为文件路径列表中的每个项目捕获一个子字符串。我循环的列表在文件系统中不存在,所以我不能使用 Path 类。我想从字符串的末尾开始解析,并在到达第一个“/”时停止。我已经尝试过 .Substring() 和 .Split() 但两种方法似乎都无法匹配指定的模式或从右到左读取。
示例:一些目录/一些子目录/SomeFile.pdf
我想捕获“SomeFile.pdf”
您应该改用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
如果您使用路径,请使用该类)
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);
}
}
如果您实际上将其视为文件/文件夹信息,则使用 Path 是最好的,但如果您将其视为恰好想在 '/' 处拆分的字符串,那么您可以先拆分然后反转:
string str = "Some Directory/Some SubDirectory/SomeFile.pdf";
string[] terms = str.Split('/');
Array.Reverse(terms);
foreach (string term in terms)
{
Console.WriteLine(term);
}