Una opción sería hacer System.IO.Directory.GetParent () varias veces. ¿Existe una forma más elegante de subir algunas carpetas desde donde reside el ensamblado en ejecución?
Lo que intento hacer es encontrar un archivo de texto que resida en una carpeta encima de la carpeta de la aplicación. Pero el ensamblaje en sí está dentro del contenedor, que son algunas carpetas dentro de la carpeta de la aplicación.
c#
.net
console-application
desarrollador747
fuente
fuente
Directory.SetCurrentDirectory(@"..\..\..\..");
Respuestas:
Otra forma sencilla es hacer esto:
Nota Esto sube dos niveles. El resultado sería:
newPath = @"C:\Folder1\Folder2\";
fuente
Path.Combine
cuando está agregando barra invertida manualmente de todos modos. Considere usar en suPath.Combine(path, "..", "..")
lugar.si c: \ carpeta1 \ carpeta2 \ carpeta3 \ bin es la ruta, el siguiente código devolverá la ruta de la carpeta base de la carpeta bin
es decir, c: \ carpeta1 \ carpeta2 \ carpeta3
si desea la ruta folder2, puede obtener el directorio por
luego obtendrá la ruta como c: \ folder1 \ folder2 \
fuente
Puede usar
..\path
para subir un nivel,..\..\path
para subir dos niveles desde el camino.También puedes usar la
Path
clase.Clase de ruta de C #
fuente
Esto es lo que mejor funcionó para mí:
string parentOfStartupPath = Path.GetFullPath(Path.Combine(Application.StartupPath, @"../"));
Obtener la ruta 'correcta' no fue el problema, agregar '../' obviamente hace eso, pero después de eso, la cadena dada no se puede usar, porque simplemente agregará el '../' al final. Rodearlo con
Path.GetFullPath()
le dará el camino absoluto, haciéndolo utilizable.fuente
El siguiente método busca un archivo que comienza con la ruta de inicio de la aplicación (carpeta * .exe). Si el archivo no se encuentra allí, se buscan las carpetas principales hasta que se encuentra el archivo o se llega a la carpeta raíz.
null
se devuelve si no se encontró el archivo.Nota:
Application.StartupPath
generalmente se usa en aplicaciones WinForms, pero también funciona en aplicaciones de consola; sin embargo, deberá establecer una referencia alSystem.Windows.Forms
ensamblaje. Puede reemplazarApplication.StartupPath
porPath.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
si lo prefiere.fuente
¿Quizás podría usar una función si desea declarar el número de niveles y ponerlo en una función?
Y podrías llamarlo así:
fuente
C#
fuente
esto puede ayudar
fuente
Tengo algunos directorios virtuales y no puedo usar métodos de directorio. Entonces, hice una función simple de división / unión para aquellos interesados. Aunque no tan seguro.
Por lo tanto, si desea mover hasta 4, sólo tiene que cambiar la
1
a4
y añadir algunos controles a excepciones evitar.fuente
Si conoce la carpeta a la que desea navegar, busque el índice y luego la subcadena.
fuente
a
, por ejemplo? ¿Qué pasa si el camino se ve asíC:\Folderame3\Folderame2\Folderame\...
?