C#等同于InStrRev

时间:2011-04-02 06:09:23

标签: 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\\";

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

3 个答案:

答案 0 :(得分:8)

使用strToSearch.LastIndexOf(strToFind);

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

你说你想得到文件名开头的位置。但是,您的示例路径不包含文件名。 (因为它以\结尾,表示它是目录名。)

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

答案 1 :(得分:6)

大概你想忽略字符串中的最后一个\,因为你的VB代码正在搜索除最后一个字符之外的所有字符。您的C#代码无法正常工作,因为它正在搜索整个字符串,将\作为字符串中的最后一个字符,导致您的子字符串不返回任何内容。您必须告诉LastIndexOf从最后一个角色开始,就像在VB中一样。

我认为与VB代码相当的是:

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

答案 2 :(得分:3)

var fullPath = @"C:\foo\bar\file.txt";
var folderName = new FileInfo(fullPath).Directory.Name;
//folderName will be "bar"

编辑:澄清的例子