C#相当于InStrRev

C#相当于InStrRev,c#,string,C#,String,我已经搜索了一个多小时,但我一辈子都不知道如何从右边开始搜索字符串变量。我要做的是获取路径的最后一个文件夹(就在文件名之前),在VB6中,我将执行以下操作: Dim s As String s = "C:\Windows\System32\Foo\Bar\" Debug.Print Mid(s, InStrRev(Left(s, Len(s) - 1), "\") + 1) 以下是我迄今为止所做的尝试: string s = "C:\\Windows\System32\\Foo\\Bar\

我已经搜索了一个多小时,但我一辈子都不知道如何从右边开始搜索字符串变量。我要做的是获取路径的最后一个文件夹(就在文件名之前),在VB6中,我将执行以下操作:

Dim s As String

s = "C:\Windows\System32\Foo\Bar\"

Debug.Print Mid(s, InStrRev(Left(s, Len(s) - 1), "\") + 1)
以下是我迄今为止所做的尝试:

string s = "C:\\Windows\System32\\Foo\\Bar\\";

s = agencyName.Substring(s.LastIndexOf("\\") + 1) 

使用strToSearch.LastIndexOf(strToFind)

编辑:我看到你更新了你的问题,说你已经尝试了
LastIndexOf()
。这个方法很有效,我已经用过很多次了

您说过要获取文件名开始的位置。但是,示例路径不包含文件名。(因为它以
\
结尾,这表示它是一个目录名。)


正如其他地方所建议的,如果您真的不想要最后一个
\
,那么您需要指定开始索引,以便告诉
LastIndexOf()
跳过您不想要的尾部反斜杠。

大概您想要忽略字符串中的最后一个
\
,因为VB代码正在搜索除最后一个字符以外的所有字符。您的C#代码不起作用,因为它正在搜索整个字符串,找到
\
作为字符串中的最后一个字符,导致您的子字符串不返回任何内容。您必须告诉
LastIndexOf
从最后一个字符之前的字符开始,就像在VB中一样

我认为与您的VB代码等效的代码是:

s = s.Substring(s.LastIndexOf("\\", s.Length - 2) + 1)  

编辑:澄清例子

他已经试过了。如果它有效的话,他就不会发布了。@Gabe:我没有在他原来的帖子中看到
LastIndexOf()
。它是在中编辑的。为我工作,谢谢!我就是想不起来了,我想已经很晚了,我需要睡觉了。这个解决方案是否只返回字符串的路径部分?@Mark Yes这将返回“bar”。我以为这就是你的要求。
var fullPath = @"C:\foo\bar\file.txt";
var folderName = new FileInfo(fullPath).Directory.Name;
//folderName will be "bar"