2009-05-26 23 views
5

Tengo una ruta completa como se indica a continuación.¿Cómo obtener una parte de la ruta completa en C#?

C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd 

¿Cómo se pueden obtener los "DTDs" de esta parte?

salida deseado:

C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug‌​\DannyGoXuk.DTDs 

¿Puedo usar métodos String 's para esto?
En caso afirmativo, ¿cómo recuperarlo?

+4

Por favor introduzca el de salida que quieres de este ejemplo. Parece que quieres el nombre del archivo, pero dices "directorio". – harpo

+0

Quiero un directorio DTDs –

+1

O tal vez debería haber un \ donde hay un. después de las DTD? – RichardOD

Respuesta

7

Editar: Lea atentamente la pregunta de la OP y todos sus comentarios antes de desestimar esto. La pregunta del título de OP no es EXACTAMENTE lo que ella quería. Mi respuesta le dio lo que necesitaba para resolver su problema. Por eso ella lo votó como la respuesta. Sí, la respuesta de Joel es correcta si responde específicamente la pregunta del título. Pero después de leer sus comentarios, verá que no es exactamente lo que estaba buscando. Gracias.

Utilice esta ...

string strFullPath = @"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"; 
string strDirName; 
int intLocation, intLength; 

intLength = strFullPath.Length; 
intLocation = strFullPath.IndexOf("DTDs"); 

strDirName = strFullPath.Substring(0, intLocation); 

textBox2.Text = strDirName; 
+0

Gracias JimDel pero esta parte me dio el o/p "DTDs.xhtml-math-svg-flat.dtd". Solo estoy buscando DTD. No quiero el archivo xhtml-math-svg-flat.dtd con él. –

+0

el uso de esta subcadena en su lugar ... strDirName = strFullPath.Substring (0, intLocation); – JimDel

+1

Gracias Jim esto solo estaba buscando ..... –

76

Use System.IO.Path.GetDirectoryName() para toda la ruta o new DirectoryInfo(path).Parent.Name para el nombre de esa única carpeta.


No hay directorio llamado "DTD" en la ruta informados. Parece que hay un archivo llamado "DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd", pero los puntos (.) En esa ruta no son caracteres válidos para separar el directorio. ¿Querías decir "DannyGoXuk\DTDs\xhtml-math-svg-flat.dtd"?

Si ese es el caso, dado que toda nueva ruta, quieres algo como esto para devolver una lista de archivos en la carpeta DTDs:

string path = @"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk\DTDs\xhtml-math-svg-flat.dtd"; 
string[] files = new DirectoryInfo(path).Parent.GetFiles(); 

en la ventana de propiedades i elegir Tipo de compilación como recurso incrustado.

Y ahora finalmente lo conseguimos. Cuando elige "Recurso incrustado", el artículo se incluye en el archivo de programa ejecutable. Ya no hay una ruta directa. En su lugar, configure su Tipo de compilación en "Contenido" y configure "Copiar en el directorio de salida" en "Copiar siempre" o "Copiar si es nuevo".

+0

No funciona.De hecho, devuelve la parte no deseada solo ... –

+0

Da el valor NULL –

+3

GetDirectoryName ("C: \ Mehrdad \ Test") devuelve "C: \ Mehrdad" –

12

Calling

System.IO.Path.GetFileName 

con la ruta completa del directorio devuelve la última parte de la ruta que es un nombre de directorio. GetDirectoryName devuelve la ruta completa del directorio principal que no es deseada.

Si usted tiene un nombre de archivo y lo que desea el nombre del directorio padre:

var directoryFullPath = Path.GetDirectoryName(@"C:\DTDs\mydtd.dtd"); // C:\DTDs 
var directoryName = Path.GetFileName(directoryFullPath); // DTDs 
+1

GetFileName() devolverá "mydtd.dtd" –

+0

GetFileName dado que la ruta del directorio devolverá la última parte. Debería llamarlo con la * ruta del directorio *, que puede obtener de GetDirectoryName. Lo expliqué en la edición. –

+0

No entendí que estaba haciendo un proceso de dos pasos, pensó que estaba llamando a GetFileName() en la cadena original. –

5
System.IO.Path.GetFileName(System.IO.Path.GetDirectoryName(fullPath)) 

que devolverá sólo el nombre de la carpeta que contiene el archivo.

Para

C:\windows\system32\user32.dll 

esto devolverá

system32 

estoy infiriendo que eso es lo que quiere.

+0

Gracias, Harpo, estás un poco cerca de mi respuesta, pero aquí tienes el separador de directorio para obtener "System32" como directorio pero en mi caso no existe tal cosa "/". Mientras que tengo archivos de recursos y estos archivos están en la carpeta DTD bajo DannyGoXuk Project.so estoy obteniendo estos archivos uno por uno utilizando el bucle foreach y quiero obtener el directorio DTDs.Lo cual acaba de dar DannyGoXuk.DTDs.xhtml-math- svg-flat.dtd.where xhtml-math-svg-flat.dtd es un archivo dtd en el directorio DTD bajo el proyecto DannyGoXuk. –

2

Se puede utilizar:

System.IO.Path.GetDirectoryName(path); 
2

Puede utilizar Path ...

Path.GetDirectoryName(myStr); 
2

No utilice la manipulación de cadenas directamente. En su lugar utilizar GetDirectoryName de la clase Path:

System.IO.Path.GetDirectoryName(myPath); 
+0

Dosent funcionó .. –

+0

Esto funcionó perfectamente para mí. –

2

utilizar el objeto FileInfo ...

FileInfo info = new FileInfo(@"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"); 
string directoryName = info.Directory.FullName; 

El archivo no tiene ni siquiera que exista realmente. vuelve

+0

obtengo este error .. No puedo convertir implícitamente el tipo 'System.IO.FileInfo' en 'System.Reflection.FieldInfo' \t Porque estoy usando los archivos en los recursos. –

1

Path.GetDirectory en el camino que ha especificado:

"C: \ Users \ Ronny \ Desktop \ Sources \ Danny \ kawas \ trunk \ CSharp \ ImportME \ XukMe \ bin \ Debug"

Try usted mismo:

var path = Path.GetDirectoryName(@"C:\Users\Ronny\Desktop\Sources\Danny\kawas\trunk\csharp\ImportME\XukMe\bin\Debug\DannyGoXuk.DTDs.xhtml-math-svg-flat.dtd"); 

Su pregunta es un poco extraña, sin embargo, no hay un directorio llamado DTDs.

+0

DTDs de directorio está en el proyecto DannyGoXuk.i he incrustado todos los archivos de recursos en el directorio de DTDs. En el código quiero buscar este directorio, ¿cómo puedo hacerlo, esto solo quiero saber? Gracias .. –

5

Uso:

string dirName = new DirectoryInfo(fullPath).name; 
9

También puede utilizar Directory para obtener el directorio de la ruta completa del archivo:

Directory.GetParent(path).FullName 
Cuestiones relacionadas