2011-04-02 175 views
8

我一直在尋找超過一個小時,我不能爲我的生活弄清楚如何從右側開始搜索字符串變量。我想要做的是讓一個路徑(右前的文件名)的最後一個文件夾,在VB6我會做這樣的事情:C#相當於InStrRev

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) 

回答

6

大概你想忽略字符串中最後的\,因爲你的VB代碼正在搜索除最後一個字符以外的所有字符。你的C#代碼不工作,因爲它搜索整個字符串,找到\作爲字符串中的最後一個字符,導致你的子字符串不返回任何內容。你必須告訴LastIndexOf從最後一個字符開始,就像你在VB中做的那樣。

我認爲等同於您的VB代碼如下:

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

爲我工作的感謝!我無法將這個想法包裹起來,我想這是晚了,我需要睡眠。 – 2011-04-02 06:35:52

+1

我知道這是非常古老的,但只是提及「\\」可能是@「\」... – menssana 2014-03-19 19:00:07

8

使用strToSearch.LastIndexOf(strToFind);

編輯:我看到你更新了你的問題,說你已經試過LastIndexOf()。這種方法的工作原理,我用了很多次。

你說你想獲得文件名開始的位置。但是,您的示例路徑不包含文件名。 (因爲它與\結束,這表明它是一個目錄名。)

至於其他地方的建議,如果你真的不希望最後\,那麼你需要爲了告訴LastIndexOf()跳過指定的起始索引你不想要的尾部反斜槓。

+0

他已經試過了。如果有效,他不會發布它。 – Gabe 2011-04-02 06:22:09

+0

@Gabe:我在他原來的文章中沒有看到'LastIndexOf()'。它被編輯爲。 – 2011-04-02 06:25:05

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

編輯:澄清例如

+0

這種解決方案只是返回字符串的路徑部分嗎? – 2011-04-02 06:37:40

+0

@Mark是的,這將返回「酒吧」。認爲這是你問的。 – 2011-04-02 06:41:37

+0

你是對的,謝謝你的解決方案! – 2011-04-02 07:16:29