2011-04-02 30 views
8

He estado buscando durante más de una hora y no puedo imaginar cómo buscar una variable de cadena comenzando a la derecha. Lo que quiero hacer es conseguir la última carpeta de un camino (a la derecha antes de que el nombre de archivo), en VB6 me gustaría hacer algo como esto:C# equivalente a InStrRev

Dim s As String 

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

Debug.Print Mid(s, InStrRev(Left(s, Len(s) - 1), "\") + 1) 

Aquí es lo que he intentado hasta ahora:

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

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

Respuesta

6

Presumiblemente, desea ignorar el último \ en la cadena, porque su código VB está buscando todos menos el último carácter. Su código C# no funciona porque está buscando toda la cadena, encontrando el \ como el último carácter en la cadena, haciendo que su subcadena no devuelva nada. Tienes que decirle al LastIndexOf que comience en el personaje anterior al último tal como lo hiciste en VB.

creo que el equivalente a su código VB sería:

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

¡El trabajo para mí, gracias! Simplemente no podía entender esto, creo que es tarde y necesito dormir. –

+1

Sé que esto es muy antiguo, pero solo mencionar "\\" podría haber sido @ "\" ... – menssana

8

Use strToSearch.LastIndexOf(strToFind);.

EDIT: Veo que actualizó su pregunta para decir que ha intentado LastIndexOf(). Este método funciona, lo he usado muchas veces.

Dijiste que quieres obtener la posición donde comienza el nombre del archivo. Sin embargo, su ruta de ejemplo no contiene ningún nombre de archivo. (Ya que termina con \, que indica que es un nombre de directorio.)

Como se sugirió en otro lugar, si usted realmente no quiere la última \, a continuación, es necesario especificar el índice de inicio para contar LastIndexOf() saltarse las barras diagonales inversas que no quieres.

+0

Ya lo intentó. Si funcionó, no lo habría publicado. – Gabe

+0

@Gabe: No vi 'LastIndexOf()' en su publicación original. Fue editado en. –

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

Editar: Se ha aclarado ejemplo

+0

¿Esta solución no devolvería solo la parte del camino de la cadena? –

+0

@Mark Sí, esto devolvería "barra". Pensé que eso era lo que preguntaste. –

+0

¡Tiene razón, gracias por la solución! –