2011-01-19 25 views
8

Tengo un programa de línea de comandos que toma un archivo de configuración como parámetro, es decir, C: \ myprogram.exe -c C: \ configFiles \ MyConfigFile.txt. Quiero ser capaz de hacerlo de modo que no tengo que escribir la ruta absoluta al archivo de configuración, así que en vez de lo anterior que solo tiene que introducir C: \ -c MyProgram.EXE MyConfigFile.txtRuta relativa a un archivo con C#

No estoy lo suficientemente familiarizado con cómo C# trata con las rutas para comprender si se puede o no hacer esto. Cualquier idea es apreciada.

+0

posible duplicado de [¿Cómo convierto una ruta relativa a una ruta completa en C#/.NET?] (Http://stackoverflow.com/questions/2162292/how-do-i-convert-a-relative -path-to-a-fully-qualified-path-in-c-net) – finnw

Respuesta

12

Uso Path.GetFullPath()

Algo así como:

string path = "MyConfigFile.txt"; 
string fullPath = System.IO.Path.GetFullPath(path); 

Eso es si el archivo de configuración se encuentra en el directorio actual. Si están almacenados en una carpeta estándar puede utilizar Path.Combine()

string basePath = "C:\Configs"; 
string file = "MyConfigFile.txt"; 
string fullPath = System.IO.Path.Combine(basePath, file); 
+2

esto obtiene la ruta absoluta, no la ruta relativa. – dopatraman

+0

@codeninja Sí, pero es una ruta absoluta que se determinó en tiempo de ejecución _relativa_ al directorio actual, al igual que System.Path siempre lo hace; [de MSDN:] (http://msdn.microsoft.com/en-us/library/system.io.path.aspx) 'la ubicación actual se utiliza como punto de partida al ubicar un archivo especificado con una ruta relativa. ' Además, del mismo artículo:' Para determinar el directorio actual, llame a Directory.GetCurrentDirectory'. – brichins

4

Sólo está de paso en una cadena. Depende de usted manejarlo de una manera relativa.

Si usó este código, sería compatible por defecto con las rutas relativas.

FileInfo intentará utilizar la ruta en Environment.CurrentDirectory primero, si la ruta proporcionada no es explícita.

var file = new FileInfo(args[1]); // args[1] can be a filename of a local file 
Console.WriteLine(file.FullName); // Would show the full path to the file 
0

Bueno, las clases .NET estándar están trabajando con rutas relativas de la misma manera que con absoluto, por lo que podría usarlas sin ningún problema. Si C: root es el directorio de trabajo de su programa, puede usar c:\myprogram.exe -c configFiles\MyConfigFile.txt y apuntará a c:\configFiles\MyConfigFile.txt.

0

Sin la ruta relativa como parte del argumento de entrada, su aplicación tendría que:

  • o bien buscar el archivo que se pasa en
  • añadir el nombre de ruta del directorio de configuración para el nombre del archivo
2

Usted tiene algunas opciones generales:

  • almacenar el directorio de pat h en el archivo de configuración (ha dicho que no desea hacer esto)
  • Haga que el usuario ingrese una ruta relativa (.... \ MiArchivo.txt)
  • Busque mediante programación archivos que coincidan con el nombre (muy lento y con tendencia a la localización de múltiples archivos del mismo nombre)
  • asumir el archivo de datos se encuentra en el directorio de ejecución de

Cualquier forma que se mire, el usuario debe indicar la ruta de acceso al directorio, ya sea en la configuración archivo, ingrese la ruta relativa, o seleccione de una lista de archivos con nombres idénticos encontrados en directorios diferentes.

ANALOGY: Coloca un libro de texto en un casillero, en algún lugar de la escuela. Usted le pide a su amigo que obtenga el libro de "un casillero", sin aludir exactamente a qué casillero puede ser.Deberías esperar mucho tiempo y terminar con 50 libros similares. O bien, brinde una pista sobre el pasillo, el banco de casilleros y/o el número de casillero en el que se puede guardar el libro. La vaguedad de su pista está directamente correlacionada con el tiempo de respuesta y el potencial para devolver múltiples posibilidades.

Cuestiones relacionadas