2010-07-09 8 views
6

Digamos que tiene esta estructura de archivos¿Cómo obtener una ruta desde un directorio en una aplicación de consola C#?

Soultion-> Carpeta1 -> FileIwant.html

Así que esto podría ser algo como C: \ soultion \ Carpeta1 \ FilterIwant.html

Ahora tengo que leer este archivo en mi aplicación No puedo codificarlo, ya que cuando se lo doy a alguien más, podrían ponerlo en F: conducir o algo así.

O cuando creo un archivo msi, la ruta puede ser completamente diferente. Entonces, ¿cómo puedo decir que tal vez tomar

"Carpeta1 \ FilterIwant.html"

y usarlo para obtener la ruta de la carpeta, independientemente de dónde se la pusieron?

Editar

me trataron Path.GetFullPath pero la tierra en el directorio bin/debug. Pero mi archivo no está en ese directorio. Creo que es un par de directorios antes. Además, si hago un archivo msi, ¿tendré el directorio bin/debug?

Respuesta

6

¿Por qué es un archivo que se utiliza como parte de su solicitud no en la misma carpeta que la aplicación? Me parece que debe establecer las propiedades en ese archivo para copiar a la carpeta de salida cuando hace una compilación.

Al hacerlo, se asegurará de que su archivo sea en la carpeta bin \ debug.

EDIT: eso o se debe a colocar sus archivos en una de las carpetas especiales, datos de aplicaciones o mis documentos vienen a la mente.

+0

Bueno, me gusta tener mis cosas en una carpeta que no esté volando por ahí en algún lugar. – chobo2

+0

eso está bien, y hay razones válidas para hacerlo. particularmente en un entorno cerrado. por lo tanto, le sugiero que busque darles un lugar a sus archivos en la carpeta AppData. –

1

Path.GetFullPath

Editar

El bin/depuración camino no estará presente cuando se ejecuta la aplicación instalada (a menos que se diga específicamente que el instalador use ese subdirectorio, por supuesto).

+0

Trató de eso. La ruta termina estando en bin/debug, así que no estoy seguro de qué hacer entonces. – chobo2

+0

Respuesta actualizada para que coincida con la pregunta actualizada. –

1

necesita la ayuda de System.Io.Path clase:

GetFullPath: Devuelve la ruta absoluta para la cadena de ruta especificada.

Editar:

También podría ser necesario el directorio de la aplicación - aquí es donde se va a instalar su aplicación:

string appPath = Path.GetDirectoryName(Application.ExecutablePath); 
0

Es posible que desee pasar la ruta completa como una línea de comandos argumento. A continuación, puede obtener el argumento utilizando el parámetro args del método Main. Para convertir una ruta relativa a un absoluto puede utilizar Path.GetFullPath:

using System; 
using System.IO; 

public class CommandLine 
{ 
    public static void Main(string[] args) 
    { 
     // The path is passed as the first argument 
     string fileName = arg[0]; 

     // get absolute path 
     fileName = Path.GetFullPath(fileName); 

     // TODO: do whatever needs to done with the passed file name 
    } 

}

4

Cuando Visual Studio compila su proyecto, colocará la salida en el directorio bin\debug. Todos los archivos de contenido a los que desee hacer referencia también se deben copiar en esas ubicaciones, para que su aplicación que reside en ese directorio pueda leer ese archivo.

tiene dos opciones:

  • o bien se establece la propiedad Copy to Output Directory en su FilterIwant.html a Copy if newer; en ese caso, si el archivo ha cambiado, se copia en el directorio de salida, y usted debería ser capaz de hacer referencia a él y cargarlo hay

o

  • que acaba de definir un camino en su app.config, algo así como DataPath, y configúrelo en su carpeta donde reside el archivo. Desde su aplicación, a continuación, cree el nombre completo de la ruta para ese archivo como Path.Combine(AppSettings["DataPath"], "FilterIwant.html") - con este enfoque, se volverá totalmente independiente de dónde está realmente el archivo y no necesita moverse por nada. Además, esto le brinda la oportunidad de crear una utilidad de administración/configuración para sus usuarios más adelante, de modo que puedan elegir el directorio que deseen, y su aplicación encontrará esos archivos allí.
+0

Con el segundo método, básicamente tiene que configurarlo en la ruta correcta cada vez que lo implemente correctamente. – chobo2

+0

@ chobo2: tendrías que configurarlo una vez para cada instalación, sí. Pero tener una entrada de configuración también le da la posibilidad de permitir que el usuario final la modifique por sí solo, usando, p. una utilidad de configuración. Si codifica el comportamiento en su código, no tiene esa posibilidad –

2

En mi aplicación de consola, comencé con el directorio de depuración hasta que encontré la carpeta principal más cercana que quería.

 static void Main(string[] args) 
     { 
      Console.WriteLine("Start"); 
      var debugDir = Environment.CurrentDirectory; 
      DirectoryInfo di = new DirectoryInfo(debugDir);    
      var searchDir = ""; 
      while (!di.FullName.ToLower().EndsWith("Folder1")) 
      { 
       if(di.FullName.ToLower().EndsWith(":")) //if you went too far up as in "D:" then 
        break; 
       di = di.Parent; 
      } 

      Console.WriteLine(di.FullName); 
} 
Cuestiones relacionadas