2012-06-27 26 views
5

Necesito recortar una subcadena de una cadena, si esa subcadena existe.Recortar caracteres de una cadena

Específicamente, si la cadena es "MainGUI.exe", entonces necesito que se convierta en "MainGUI", recortando ".exe" de la cadena.

yo probamos este:

 String line = "MainGUI.exe"; 
    char[] exe = {'e', 'x', 'e', '.'}; 
    line.TrimEnd(exe); 

Esto me da la respuesta correcta para "MainGui.exe", pero para algo así como "MainGUIe.exe" no funciona, dando a mí "MainGUI" en lugar de "MainGUIe".

Estoy usando C#. ¡Gracias por la ayuda!

Respuesta

15

Utilice la clase estática Path en el espacio de nombres System.IO, le permite quitar extensiones y directorios de nombres de archivos fácilmente. También puede usarlo para obtener la extensión, la ruta completa, etc. Es una clase muy práctica y vale la pena investigarla.

var filename = Path.GetFileNameWithoutExtension(line); 

Le da "MainGUI", esto es, por supuesto, asumiendo que desea recortar cualquier extensión de archivo o si conoce su archivo siempre va a ser un archivo .exe, si quieres sólo para recortar las extensiones desactivadas de archivos .exe, sin embargo, y déjelo en otros. Puede probar primero, ya sea usando String.EndsWith() o usando el método Path.GetExtension().

+0

Esto funcionó, gracias a todos por ayudarme! – nat

13

Usaría Path.GetFileNameWithoutExtension en lugar de manipulación de cadenas para manejar esto.

string line = “MainGUI.exe”; 
string fileWithoutExtension = Path.GetFileNameWithoutExtension(line); 

Si sólo desea quitarse la extensión si es .exe, se puede comprobar que también. El siguiente sólo quitarse las extensiones de .exe, pero deja intactas todas las demás extensiones:

string ext = Path.GetExtension(line).ToLower(); 
string fileWithoutExtension = ext == ".exe" 
           ? Path.GetFileNameWithoutExtension(line) 
           : line; 
+0

Tenga en cuenta que esto quitará todas las extensiones de archivo, no solo .exe. Eso puede o no ser lo que quieres. – Servy

+0

@Servy La edición debería manejar ese caso, ahora, también ... –

3

Si siempre está recortando ".exe" puede recortar los últimos 4 caracteres independientemente del resto de la cadena.

line.Substring(0, line.Length - ".exe".Length); 
3
string line = "MainGUI.exe"; 
if (line.EndsWith(".exe")) 
    line = line.Substring(0, line.Length - 4); 
0

Como ninguna extensión de archivo tiene un punto dentro de ella, que son seguros de usar esto (.):

String line = "MainGUI.exe"; 
line = line.Substring(0, line.LastIndexOf('.')); 
Cuestiones relacionadas