Tengo un problema sencillo. Tengo una ruta a un archivo en el directorio de usuario que se parece a esto:

%USERPROFILE%\AppData\Local\MyProg\settings.file

Cuando intento abrirlo como un archivo de

ostream = new FileStream(fileName, FileMode.Open);

Escupe error porque intenta agregar %userprofile% en el directorio actual, por lo que se convierte en:

C:\Program Files\MyProg\%USERPROFILE%\AppData\Local\MyProg\settings.file

¿Cómo puedo hacer es reconocer que un camino que comienza con %USERPROFILE% es un absoluto, no es una ruta relativa?

PS: no puedo utilizar

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)

Porque tengo que abrir el archivo por su nombre. El usuario especifica el nombre. Si el usuario especifica «los ajustes.archivo», necesito abrir un archivo con respecto al programa de directorios, si el usuario especifica un camino que comienza con %USERPROFILE% o alguna otra cosa que convierte a C:\something, necesito abrirlo así!

InformationsquelleAutor Istrebitel | 2012-04-03

5 Comentarios

  1. 77

    Uso medio Ambiente.ExpandEnvironmentVariables en el camino antes de usarlo.

    var pathWithEnv = @"%USERPROFILE%\AppData\Local\MyProg\settings.file";
    var filePath = Environment.ExpandEnvironmentVariables(pathWithEnv);
    
    using(ostream = new FileStream(filePath, FileMode.Open))
    {
       //...
    }
    • ¿Por qué no Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)?
    • Porque esto es más general – usted está asumiendo que la variable de entorno pasa siempre será %USERPROFILE% – ¿y si es algo más? (que es lo que la pregunta está pidiendo – se está preguntando acerca de la expansión de la variable de entorno – que el ejemplo utilizado es el perfil de usuario es incidental).
    • Ahh, ya veo. Mal ejemplo el OP dio
    • Es un terrible ejemplo de la OP dio si eso es lo que la pregunta realmente es. Como es que esta es una muy mala práctica, y usted debe estar utilizando Environment.GetFolderPath para este tipo de cosas.
  2. 4

    Utilizar el Environment.ExpandEnvironmentVariables método estático:

    string fileName= Environment.ExpandEnvironmentVariables(fileName);
    ostream = new FileStream(fileName, FileMode.Open);
    • No olvides usar un using instrucción de la secuencia.
  3. 1

    Puedo usar esto en mi Utilidades de la biblioteca.

    using System;
    namespace Utilities
    {
        public static class MyProfile
       {
            public static string Path(string target)
            {
                string basePath = 
    Environment.GetFolderPath(Environment.SpecialFolder.UserProfile) + 
    @"\Automation\";
                return basePath + target;
            }
        }
    }

    Así que simplemente puede usarse, por ejemplo, «string testBenchPath = mi perfil.Ruta De Acceso(«Resultados»);»

  4. -1

    Puede utilizar el Environment.Username constante así. Tanto de la %USERPROFILE% y esta variable de Entorno de los puntos de la misma( que es el usuario actualmente conectado). Pero si usted elige este camino, usted tiene que concatenar el camino por ti mismo.

    • Ok, hay un poco de diferencia, lo que se me olvidó. La variable de entorno significa «C:\Users\{nombre de usuario}», mientras que el otro sólo la «{nombre de usuario}»
    • No. El nombre de usuario no puede ser el mismo que el perfil de usuario el nombre de la carpeta, por favor no asuma este. (Considerar cuando carpeta ya existe y un nuevo usuario con el mismo nombre se crea – Windows va a elegir un nuevo nombre de carpeta)

Dejar respuesta

Please enter your comment!
Please enter your name here